En fait big-O est seulement une limite supérieure, ce qui signifie que vous pouvez dire un O(1)
algorithme (ou vraiment tout algorithme prenant O(n
ou moins de temps) prend 2
. À cette fin, nous allons passer en grande-Theta (Θ) la notation, qui est juste serré lié. Voir les définitions officielles pour plus d'informations.
Si vous ne connaissez sur le big-O, il est probable que vous avez (à tort) été enseigné que le big-O est un serré lié. Si oui, vous pouvez probablement juste de supposer big-Theta signifie ce que vous avez appris big-O moyens.
Je vais, pour le reste de cette réponse, supposons que vous m'avez demandé (ou signifié) grand-Thêta, pas grand-O. Si ce n'est, comme déjà mentionné, si parler de big-O, qui serait plutôt un "anything goes" situation - )
on peut être plus rapide, O(n
on peut être plus rapide ou ils peuvent prendre la même quantité de temps (asymptotiquement) - on ne peut généralement pas faire en particulier des conclusions significatives quant à la comparaison de la grande-O des algorithmes, on peut seulement dire que, étant donné un big-O d'un algorithme, que cet algorithme ne pourra pas prendre plus que ce laps de temps (asymptotiquement).
Asymptotique de la complexité (qui est ce que les deux grands-S et grand-Theta représenter) ignore complètement la constante de facteurs en jeu - il est uniquement destiné à donner une indication de combien de temps de course sera la variation de la taille de l'entrée devient plus grand.
Il est donc certainement possible qu'un 2
algorithme peut prendre plus d'une )
un pour certains O(n)
- dont O(n
ce qui va se passer pour va vraiment dépendre sur les algorithmes de votre exemple, ce sera le cas pour l' 2
, en ignorant la possibilité d'optimisations de différences entre les deux.
Pour les deux algorithmes prenant )
et Θ(n)
du temps respectivement, ce que vous êtes susceptible de voir, c'est que soit:
- L'
Θ(n
algorithme est plus lente lors de l' 2
est petit, l' )
on devient plus lent qu' n
augmente
(ce qui arrive si l' n
on est plus complexe, c'est à dire a le plus de facteurs constants), ou
- L'
n < 100
on est toujours plus lent.
Bien qu'il est certainement possible que l' Θ(n)
algorithme peut être plus lent, puis l' Θ(n
un, puis de l' 2
un de nouveau, et ainsi de suite en )
augmente, jusqu' Θ(n)
devient très grande, à partir de laquelle, à partir de l' n
on sera toujours plus lent, bien qu'il est fortement improbable.
Pour le mettre à un peu plus de termes mathématiques:
Disons que l' Θ(n
algorithme prend 2
opérations de quelque )
.
Et l' n
algorithme prend Θ(n)
opérations de quelque Θ(n
.
Ceci est en ligne avec la définition officielle, puisque nous pouvons supposer que cela est valable pour 2
supérieure à 0 (c'est à dire pour tous les )
) et que les deux fonctions entre lesquels le temps est le même.
En ligne avec votre exemple, si vous dites Θ(n)
et Θ(n
, puis l' 2
algorithme serait plus lente jusqu' )
, à quel point l' Θ(n)
algorithme devenir plus lent.
(avec l'aimable autorisation de WolframAlpha).