La citation est plutôt vague et imprécise. Il y a au moins trois façons connexes d'interpréter ce texte.
Le point mathématique littéral derrière cela est que, si vous n'êtes intéressé que par des instances de taille jusqu'à une certaine limite, il n'y a qu'un nombre fini d'instances possibles. Par exemple, il n'y a qu'un nombre fini de graphiques sur une centaine de sommets. S'il n'y a qu'un nombre fini d'instances, vous pouvez, en principe, résoudre le problème en construisant simplement une table de recherche de toutes les réponses à toutes les instances possibles. Maintenant, vous pouvez trouver la réponse en vérifiant d'abord que l'entrée n'est pas trop grande (ce qui prend un temps constant: si l'entrée est plus longue que k, il n'est pas valide), puis recherchez la réponse dans le tableau (ce qui prend un temps constant: il y a un nombre fixe d'entrées dans le tableau). Notez, cependant, que la taille réelle de la table est probablement incroyablement grande. J'ai dit qu'il n'y a qu'un nombre fini de graphes sur cent sommets et c'est vrai. C'est juste que le nombre fini est plus grand que le nombre d'atomes dans l'univers observable.
Un point plus pratique est que, lorsque nous disons que le temps d' exécution d'un algorithme est , cela signifie seulement qu'il est asymptotiquement c n 2 étapes, pour une constante C . Autrement dit, il y a une constante n 0 telle que, pour tout n ≥ n 0 , l'algorithme prend environ c n 2 étapes. Mais peut-être que n 0 = 100 , 000 , 000Θ(n2) cn2Cn0n≥n0cn2n0=100,000,000et vous n'êtes intéressé que par des instances de taille beaucoup plus petite que cela. La limite quadratique asymptotique pourrait même ne pas s'appliquer à vos petites instances. Vous pourriez être chanceux et cela pourrait être plus rapide sur de petites entrées (ou vous pourriez ne pas être chanceux et le faire ralentir). Par exemple, pour les petits , n 2 < 1000 n , vous préférez exécuter un algorithme quadratique avec de bonnes constantes qu'un algorithme linéaire avec de mauvaises constantes. Un exemple concret de ceci est que les algorithmes de multiplication matricielle asymptotiquement les plus efficaces (variantes de Coppersmith – Winograd , fonctionnant dans le temps O ( n 2.3729 ) ) sont rarement utilisés dans la pratique parce que Strassennn2<1000nO(n2.3729) algorithme est plus rapide à moins que vos matrices ne soient vraiment grandes.O(n2.8074)
Un troisième point est que, si est petit, n 2 et même n 3 sont petits. Par exemple, si vous avez besoin de trier quelques milliers d'éléments de données et que vous ne devez les trier qu'une seule fois, tout algorithme de tri est assez bon: a Θ ( n 2 )nn2n3Θ(n2)l'algorithme n'aura encore besoin que de quelques dizaines de millions d'instructions pour trier vos données, ce qui ne prend pas beaucoup de temps sur un processeur capable d'exécuter des milliards d'instructions par seconde. OK, il y a aussi des accès à la mémoire, mais même un algorithme lent prendra moins d'une seconde, il est probablement préférable d'utiliser un algorithme simple et lent et de bien faire les choses plutôt que d'utiliser un algorithme complexe et rapide et de constater qu'il est ultra-rapide mais bogué et ne trie pas correctement les données.