Tout d'abord, comprenons ce que sont le grand O, le grand Thêta et le grand Omega. Ils sont tous fixe de fonctions.
Big O donne le haut limite asymptotique tandis que Big Omega donne une limite inférieure. Big Theta donne les deux.
Tout ce qui est (f(n))
est également O(f(n))
mais pas l'inverse.
T(n)
est dit être dans (f(n))
s'il est à la fois dans O(f(n))
et en Omega(f(n))
.
Dans la terminologie des sets, (f(n))
es el intersection de O(f(n))
y Omega(f(n))
Par exemple, le tri de fusion est le pire des cas. O(n*log(n))
y Omega(n*log(n))
- et est donc aussi (n*log(n))
mais c'est aussi O(n^2)
puisque n^2
est asymptotiquement "plus grande" qu'elle. Cependant, il est no (n^2)
Puisque l'algorithme n'est pas Omega(n^2)
.
Une explication mathématique un peu plus approfondie
O(n)
est la limite supérieure asymptotique. Si T(n)
es O(f(n))
cela signifie qu'à partir d'un certain n0
il existe une constante C
tal que T(n) <= C * f(n)
. D'autre part, big-Omega dit qu'il y a une constante C2
tal que T(n) >= C2 * f(n))
).
Ne pas confondre !
À ne pas confondre avec l'analyse des cas les plus défavorables, les meilleurs et les moyens : les trois notations (Omega, O, Thêta) sont les suivantes no liés à l'analyse des meilleurs, pires et moyens cas des algorithmes. Chacune d'entre elles peut être appliquée à chaque analyse.
Nous l'utilisons généralement pour analyser la complexité des algorithmes. (comme l'exemple du tri par fusion ci-dessus). Lorsque nous disons "L'algorithme A est O(f(n))
Ce que nous voulons dire, c'est "La complexité des algorithmes dans le pire des cas". 1 l'analyse du cas est O(f(n))
" - c'est-à-dire qu'elle balance "similaire" (ou formellement, pas pire que) la fonction f(n)
.
Pourquoi s'intéresser à la limite asymptotique d'un algorithme ?
Eh bien, il y a de nombreuses raisons à cela, mais je crois que les plus importantes d'entre elles sont :
- Il est beaucoup plus difficile de déterminer le exact fonction de complexité, nous faisons donc un "compromis" sur les notations big-O/big-Theta, qui sont suffisamment informatives sur le plan théorique.
- Le nombre exact d'opérations est également dépendant de la plate-forme . Par exemple, si nous avons un vecteur (liste) de 16 nombres. Combien d'opérations cela prendra-t-il ? La réponse est : cela dépend. Certains processeurs permettent les additions vectorielles, d'autres non. La réponse varie donc entre les différentes implémentations et les différentes machines, ce qui est une propriété indésirable. La notation big-O est cependant beaucoup plus constante entre les machines et les implémentations.
Pour illustrer ce problème, observez les graphiques suivants :
Il est clair que f(n) = 2*n
est "pire" que f(n) = n
. Mais la différence n'est pas aussi radicale qu'avec l'autre fonction. Nous pouvons constater que f(n)=logn
devient rapidement beaucoup plus faible que les autres fonctions, et f(n) = n^2
devient rapidement beaucoup plus élevé que les autres.
Donc - pour les raisons ci-dessus, nous "ignorons" les facteurs constants (2* dans l'exemple des graphiques), et nous prenons uniquement la notation big-O.
Dans l'exemple ci-dessus, f(n)=n, f(n)=2*n
seront tous deux dans O(n)
et en Omega(n)
- et sera donc également dans Theta(n)
.
D'autre part - f(n)=logn
sera dans O(n)
(il est "meilleur" que f(n)=n
), mais ne sera PAS dans Omega(n)
- et ne sera donc PAS non plus dans Theta(n)
.
Symétriquement, f(n)=n^2
sera dans Omega(n)
mais PAS dans O(n)
et donc - n'est PAS non plus Theta(n)
.
1 Généralement, mais pas toujours, lorsque la classe d'analyse (la plus mauvaise, la moyenne et la meilleure) est manquante, nous voulons vraiment dire le pire des cas.
0 votes
Duplicata possible de Différence entre la limite inférieure et la limite supérieure ?