Je ne suis même pas un étudiant CS, donc cela pourrait être une question stupide, mais veuillez me supporter ...
À l'ère pré-informatique, nous ne pouvons implémenter une structure de données de tableau qu'avec quelque chose comme un tableau de tiroirs. Puisqu'il faut localiser le tiroir avec l'index correspondant avant d'en extraire la valeur, la complexité temporelle de la recherche de tableau est , en supposant une recherche binaire.
Cependant, l'invention des ordinateurs a fait une grande différence. Les ordinateurs modernes peuvent lire à partir de leur RAM si rapidement que nous considérons maintenant la complexité temporelle de la recherche de tableau comme étant (même si ce n'est techniquement pas le cas, car cela prend plus de temps pour déplacer le registre sur une plus grande distance, etc.)
Un autre exemple est celui des dictionnaires Python. Bien que l'on puisse obtenir une complexité d'accès au dictionnaire de avec une méthode magique surchargée mal écrite (ou ridiculement malchance, c'est-à-dire des clés ayant beaucoup de collisions de hachage), il est généralement présumé être . Dans ce cas, la complexité temporelle dépend à la fois de l'implémentation de table de hachage des dictionnaires Python et de l'implémentation des clés des fonctions de hachage.O ( 1 )__hash__
Est-ce à dire que le matériel / l'implémentation peuvent affecter la complexité temporelle des algorithmes? (Bien que les deux exemples concernent des structures de données au lieu d'algorithmes, ces derniers sont construits sur les premiers, et je n'ai jamais entendu parler de la complexité temporelle des structures de données, donc j'utilise ici le terme "algorithmes")
Pour moi, les algorithmes sont abstraits et conceptuels, dont les propriétés comme la complexité temps / espace ne devraient pas être affectées par leur mise en œuvre d'une manière spécifique, mais le sont-elles?