Oui, pour un N. convenablement petit, il y aura toujours un N, au-dessus duquel vous aurez toujours l'ordre suivant: O (1) <O (lg N) <O (N) <O (N log N) <O (N ^ c ) <O (c ^ N) (où O (1) <O (lg N) signifie qu’à un algorithme O (1), il faudra moins d’opérations lorsque N est convenablement grand et c est une constante fixe supérieure à 1 )
Supposons qu'un algorithme O (1) particulier prenne exactement f (N) = 10 ^ 100 opérations (un googol) et qu'un algorithme O (N) prenne exactement g (N) = 2 N + 5 opérations. L’algorithme O (N) donnera de meilleures performances jusqu’à ce que vous N soyez à peu près un googol (en fait, lorsque N> (10 ^ 100 - 5) / 2), donc si vous vous attendez à ce que N soit compris entre 1000 et un milliard, subirait une pénalité majeure en utilisant l'algorithme O (1).
Ou, pour une comparaison réaliste, supposons que vous multipliez les nombres à n chiffres. L' algorithme de Karatsuba comprend au plus 3 n ^ (lg 3) opérations (c'est-à-dire approximativement O (n ^ 1.585)), tandis que l' algorithme de Schönhage – Strassen correspond à O (N log N log log N), ce qui est un ordre plus rapide . Wikipédia:
En pratique, l'algorithme de Schönhage – Strassen commence à surpasser les anciennes méthodes telles que la multiplication de Karatsuba et Toom – Cook pour des nombres supérieurs à 2 ^ 2 ^ 15 à 2 ^ 2 ^ 17 (10 000 à 40 000 chiffres décimaux) [4] [5] [6 ]
Donc, si vous multipliez des nombres de 500 chiffres ensemble, il n’a pas de sens d’utiliser l’algorithme «plus rapide» avec de gros arguments O.
EDIT: Vous pouvez trouver déterminer f (N) comparé à g (N), en prenant la limite N-> infini de f (N) / g (N). Si la limite est 0 alors f (N) <g (N), si la limite est infinie, alors f (N)> g (N), et si la limite est une autre constante, alors f (N) ~ g (N) en termes de grande notation O.