web-dev-qa-db-fra.com

Que représente exactement la grande notation Ө?

Je suis vraiment confus quant aux différences entre les grandes notations O, Big Omega et Big Theta. 

Je comprends que big O est la limite supérieure et Big Omega est la limite inférieure, mais que représente exactement big (thêta)? 

J'ai lu que cela signifieétroitement lié, mais qu'est-ce que cela signifie?

154
user1364768

Cela signifie que l'algorithme est à la fois big-O et big-Omega dans la fonction donnée. 

Par exemple, s'il s'agit de Ө(n), il existe une constante k, telle que votre fonction (exécution, peu importe), est supérieure à n*k pour une variable suffisamment grande n et une autre constante K telle que votre fonction est inférieure à n*K pour suffisamment grand n

En d'autres termes, pour n suffisamment grand, il est pris en sandwich entre deux fonctions linéaires:

Pour k < K et n suffisamment grand, n*k < f(n) < n*K

83
happydave

Commençons par comprendre ce que sont le gros O, le grand Theta et le grand Omega. Ils sont tous ensembles de fonctions. 

Big O donne le asymptotique lié supérieur, tandis que le grand Omega donne une borne 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 dans Omega(f(n))
Dans la terminologie des ensembles, Ө(f(n)) EST LE INTERSECTION DE O(f(n)) ET Omega(f(n))

Par exemple, le pire des cas de fusion est à la fois O(n*log(n)) et Omega(n*log(n)) - et donc aussi à Ө(n*log(n)), mais également à O(n^2), puisque n^2 est asymptotiquement "plus grand" que lui. Cependant, il s’agit de notӨ(n^2), puisque l’algorithme n’est pas Omega(n^2).

Explication mathématique un peu plus profonde

O(n) est la limite supérieure asymptotique. Si T(n) est O(f(n)), cela signifie que, à partir d'un certain n0, il existe une constante C telle que T(n) <= C * f(n). Par ailleurs, Big-Omega dit qu'il existe une constante C2 telle que T(n) >= C2 * f(n))).

Ne confondez pas!

Ne pas confondre avec l'analyse des cas les plus, des meilleurs et des cas moyens: les trois notations (Omega, O, Theta) sont not liées aux analyses des cas les meilleurs, les plus mauvais et les plus moyens des algorithmes. Chacun de ceux-ci peut être appliqué à chaque analyse.

Nous l'utilisons généralement pour analyser la complexité des algorithmes (comme l'exemple de tri par fusion ci-dessus). Lorsque nous disons que "l'algorithme A est O(f(n))", ce que nous voulons vraiment dire est "La complexité de l'algorithme dans le pire des cas.1 L’analyse de cas est O(f(n)) "- ce qui signifie qu’elle est" similaire "(ou formellement, pas pire que) la fonction f(n).

Pourquoi nous occupons-nous de la liaison asymptotique d'un algorithme?

Eh bien, il y a plusieurs raisons à cela, mais je pense que les plus importantes d'entre elles sont:

  1. Il est beaucoup plus difficile de déterminer la fonction de complexité exacte, nous "faisons donc des compromis" sur les notations big-O/big-Theta, qui sont suffisamment informatives en théorie.
  2. Le nombre exact d'opérations dépend également 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: ça dépend. Certains processeurs autorisent les ajouts de vecteurs, d'autres non. La réponse varie donc selon les implémentations et les machines, ce qui est une propriété non souhaitée. La notation big-O est cependant beaucoup plus constante entre les machines et les implémentations.

Pour illustrer ce problème, consultez les graphiques suivants: enter image description here

Il est clair que f(n) = 2*n est "pire" que f(n) = n. Mais la différence n’est pas aussi radicale que dans l’autre fonction. Nous pouvons voir que f(n)=logn devient rapidement beaucoup plus bas que les autres fonctions, et f(n) = n^2 devient rapidement beaucoup plus haut que les autres.
Donc, à cause des raisons ci-dessus, nous "ignorons" les facteurs constants (2 * dans l'exemple des graphiques) et prenons uniquement la notation big-O. 

Dans l'exemple ci-dessus, f(n)=n, f(n)=2*n sera à la fois dans O(n) et dans 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 aussi 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).


1Habituellement, mais pas toujours. quand la classe d'analyse (pire, moyenne et meilleure) est manquante, nous entendons vraiment le pire des cas.

296
amit

Theta (n): Une fonction f(n) appartient à Theta(g(n)), s'il existe des constantes positives c1 et c2 telles que f(n) puisse être pris en sandwich entre c1(g(n)) et c2(g(n)). c'est-à-dire qu'il donne à la fois la limite supérieure et la limite inférieure.

Theta (g (n)) = {f(n): il existe des constantes positives c1, c2 et n1 telles que 0 <= c1 (g (n)) <= f (n) <= c2 (g (n)) pour tout n> = n1}

lorsque nous disons f(n)=c2(g(n)) ou f(n)=c1(g(n)), cela représente une limite asymptotiquement étroite.

O (n): Il ne donne que la limite supérieure (peut être serré ou non)

O(g(n)) = {f(n): il existe des constantes positives c et n1 telles que 0 <= f (n) <= cg (n) pour tout n> = n1}

ex: le 2*(n^2) = O(n^2) lié est asymptotiquement serré, alors que le 2*n = O(n^2) lié n'est pas asymptotiquement serré.

o (n): Il ne donne que la limite supérieure (jamais une limite étroite)

la différence notable entre O(n) et o(n) est f(n) est inférieure à cg (n) pour tout n> = n1 mais non égal à O (n).

ex: 2*n = o(n^2), mais 2*(n^2) != o(n^2)

13
ThisIzKp

J’espère que c’est ce que vous voudrez peut-être trouver dans le classique CLRS (page 66):  enter image description here 

1
Lerner Zhang

Grande notation Thêta:

Rien à gâcher mon pote !!

Si nous avons une valeur positive, les fonctions f(n) et g(n) prennent un argument positif n, alors ϴ (g (n)) défini comme {f (n): il existe des constantes c1 , c2 et n1 pour tout n> = n1}

où c1 g (n) <= f (n) <= c2 g (n)

Prenons un exemple:

soit f (n) =  

g (n) =  

c1 = 5 et c2 = 8 et n1 = 1

Parmi toutes les notations, la notation donne la meilleure intuition sur le taux de croissance de la fonction car elle nous donne un lien étroit contrairement à big-oh et big -omega , Qui donne respectivement les limites supérieure et inférieure.

ϴ nous dit que g(n) est aussi proche que f (n), le taux de croissance de g(n) est aussi proche du taux de croissance de f(n) comme possible.

 see the image to get a better intuition