Que représente exactement la notation big Ө?


185

Je suis vraiment confus au sujet des différences entre le gros O, le gros Omega et le gros Thêta.

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

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


Réponses:


95

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

Par exemple, si c'est le cas Ө(n), alors il y a une constante k, telle que votre fonction (run-time, peu importe), est plus grande que n*kpour suffisamment grande n, et une autre constante Ktelle que votre fonction est plus petite que n*Kpour suffisamment grande n.

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

Pour k < Ket nsuffisamment grand,n*k < f(n) < n*K


Ce n'est pas le cas, ces variables sont un peu déroutantes, elles ne sont pas liées.
Aaron Robeson le

@committedandroider Non, ils sont en minuscules et en majuscules donc différents, il utilise un style mathématique typique dans lequel deux variables "similaires" (mais sans lien d'aucune façon ici) utilisent des majuscules et des minuscules.
Santropedro

340

Voyons d'abord ce que sont le grand O, le grand Theta et le grand Omega. Ce sont tous des ensembles de fonctions.

Big O donne une borne asymptotique supérieure , tandis que Big Omega donne une borne inférieure. Big Theta donne les deux.

Tout ce qui est l' Ө(f(n))est aussi O(f(n)), mais pas l'inverse.
T(n)est dit être en Ө(f(n))si elle est à la fois dans O(f(n))et Omega(f(n)).
Dans la terminologie des ensembles, Ө(f(n))est l' intersection de O(f(n))etOmega(f(n))

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

Une explication mathématique un peu plus profonde

O(n)est la limite supérieure asymptotique. Si T(n)c'est O(f(n)), cela signifie qu'à partir d'un certain n0, il existe une constante Ctelle que T(n) <= C * f(n). D'autre part, big-Omega dit qu'il existe une constante C2telle que T(n) >= C2 * f(n))).

Ne confondez pas!

À ne pas confondre avec l'analyse des cas les pires, les meilleurs et les moyennes: les trois notations (Omega, O, Thêta) ne sont pas liées à l'analyse des meilleurs, des pires et des cas moyens des algorithmes. Chacun de ces éléments 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). Quand nous disons "l'algorithme A est O(f(n))", ce que nous voulons dire en réalité, c'est "La complexité des algorithmes dans le cas du pire 1 cas est O(f(n))" - ce qui signifie - il met à l'échelle "similaire" (ou formellement, pas pire que) la fonction f(n).

Pourquoi nous soucions-nous de la borne asymptotique d'un algorithme?

Eh bien, il y a de nombreuses raisons à cela, mais je pense que les plus importantes sont:

  1. Il est beaucoup plus difficile de déterminer la fonction de complexité exacte , donc nous «faisons un compromis» sur les notations big-O / big-Theta, qui sont assez 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: cela dépend. Certains processeurs autorisent les ajouts de vecteurs, tandis que d'autres ne le font pas, donc la réponse varie entre différentes implémentations et 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, regardez les graphiques suivants: entrez la description de l'image ici

Il est clair que f(n) = 2*nc'est "pire" que f(n) = n. Mais la différence n'est pas aussi radicale que celle de l'autre fonction. Nous pouvons voir que cela f(n)=logndevient rapidement beaucoup plus bas que les autres fonctions, et f(n) = n^2devient 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 ne prenons que la notation big-O.

Dans l'exemple ci-dessus, f(n)=n, f(n)=2*nsera à la fois dedans O(n)et dedans Omega(n)- et sera donc également dedans Theta(n).
D'autre part - f(n)=lognsera dans O(n)(c'est "mieux" que f(n)=n), mais ne sera PAS dans Omega(n)- et donc ne sera pas non plus Theta(n).
Symétriquement, f(n)=n^2sera dans Omega(n), mais PAS dans O(n), et donc - n'est pas non plus Theta(n).


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


4
@krishnaChandra: f(n) = n^2est alors asymptotiquement plus fort n, et donc Omega (n). Cependant ce n'est pas O (n) (car pour les grandes nvaleurs, il est alors plus grand c*n, pour tous n). Puisque nous avons dit que Theta (n) est l'intersection de O (n) et Omega (n), puisque ce n'est pas O (n), il ne peut pas être Theta (n) aussi.
amit le

9
C'est formidable de voir quelqu'un expliquer en quoi la notation big-O n'est pas liée au meilleur / pire des temps d'exécution d'un algorithme. Il y a tellement de sites Web qui apparaissent lorsque je recherche sur Google le sujet qui disent que O (T (n)) signifie le pire des cas.
Will Sewell le

1
@almel C'est 2 * n (2n, deux fois n) pas 2 ^ n
amit

5
@VishalK 1. Big O est la borne supérieure lorsque n tend vers l'infini. 2. Omega est la borne inférieure lorsque n tend vers l'infini. 3. Thêta est à la fois la limite supérieure et inférieure lorsque n tend vers l'infini. Notez que toutes les bornes ne sont valides que "car n tend vers l'infini", car les bornes ne sont pas valides pour les valeurs faibles de n (inférieures à n0 ). Les bornes sont valables pour tout nn0 , mais pas en dessous de n0 où les termes d'ordre inférieur deviennent dominants.
bain

1
@hey_you Relisez la réponse. big O, Theta, Omega sont des fonctions, pas des algorithmes. Le tri par fusion est le pire des cas Omega (n). C'est aussi le meilleur des cas O (n ^ 2). C'est aussi le pire des cas Theta (nlogn). En gros, pour chaque analyse (pire / meilleure / moyenne / ...) vous avez une fonction de complexité T_best(n), T_worst(n), T_average(n). Ils ne doivent pas nécessairement être identiques (et la plupart du temps, ils ne le sont pas). O / Omega / Theta peut être appliqué à n'importe lequel d'entre eux indépendamment.
amit

14

Theta (n): une fonction f(n)appartient à Theta(g(n)), s'il existe des constantes positives c1et c2telles qui f(n)peuvent être prises en sandwich entre c1(g(n))et c2(g(n)). c'est-à-dire qu'il donne à la fois une borne supérieure et une borne 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}

quand nous disons f(n)=c2(g(n))ou f(n)=c1(g(n))cela représente une limite asymptotiquement serrée.

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

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 : La borne 2*(n^2) = O(n^2)est asymptotiquement serrée, alors que la borne 2*n = O(n^2)n'est pas asymptotiquement serrée.

o (n): Il ne donne qu'une borne supérieure (jamais une borne serrée)

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

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


1
Vous n'avez pas mentionné le grand Omega, qui fait référence à la borne inférieure. Sinon, très belle première réponse et bienvenue!
bohney

1
J'ai aimé la façon dont il a défini la définition de Theta (n). Vote positif!
user720694

4

J'espère que c'est ce que vous voudrez peut-être trouver dans le CLRS classique (page 66): entrez la description de l'image ici


1

Notation Big Theta:

Rien à gâcher mon pote !!

Si nous avons une fonction à valeur positive f (n) et g (n) prend un argument à valeur positive 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 une borne serrée contrairement aux big-oh et big -omega qui donnent respectivement les bornes 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 que possible du taux de croissance de f (n).

voir l'image pour avoir une meilleure intuition


0

Tout d'abord la théorie

  1. Big O = limite supérieure O (n)

  2. Thêta = fonction de commande - thêta (n)

  3. Oméga = notation Q (limite inférieure) Q (n)

Pourquoi les gens sont-ils si confus?

Dans de nombreux blogs et livres, la façon dont cette déclaration est soulignée est

"Ceci est Big O (n ^ 3)" etc.

et les gens confondent souvent comme la météo

O (n) == thêta (n) == Q (n)

Mais ce qu'il faut garder à l'esprit, c'est qu'ils ne sont que des fonctions mathématiques avec les noms O, Theta et Omega

donc ils ont la même formule générale de polynôme,

Laisser,

f (n) = 2n4 + 100n2 + 10n + 50 alors,

g (n) = n4, donc g (n) est une fonction qui prend la fonction comme entrée et renvoie une variable avec Biggerst Power,

Même f (n) & g (n) pour ci-dessous toutes les explications

Big O - Fonction (fournit une limite supérieure)

Big O (n4) = 3n4, parce que 3n4> 2n4

3n4 est la valeur de Big O (n4) Tout comme f (x) = 3x

n4 joue ici un rôle de x donc,

Remplacement de n4 par x'so, Big O (x ') = 2x', maintenant nous sommes tous les deux heureux Concept général est

Donc 0 ≤ f (n) ≤ O (x ')

O (x ') = cg (n) = 3n4

Mettre de la valeur,

0 ≤ 2n4 + 100n2 + 10n + 50 ≤ 3n4

3n4 est notre borne supérieure

Thêta (n) fournit une limite inférieure

Theta (n4) = cg (n) = 2n4 Parce que 2n4 ≤ Notre exemple f (n)

2n4 est la valeur de Thêta (n4)

donc, 0 ≤ cg (n) ≤ f (n)

0 ≤ 2n4 ≤ 2n4 + 100n2 + 10n + 50

2n4 est notre borne inférieure

Omega n - Fonction de commande

Ceci est calculé pour découvrir que la limite inférieure du temps est similaire à la limite supérieure,

Cas 1). La limite supérieure est similaire à la limite inférieure

if Upper Bound is Similar to Lower Bound, The Average Case is Similar

Example, 2n4 ≤ f(x) ≤ 2n4,
Then Omega(n) = 2n4

Cas 2). si la limite supérieure n'est pas similaire à la limite inférieure

in this case, Omega(n) is Not fixed but Omega(n) is the set of functions with the same order of growth as g(n).

Example 2n4 ≤ f(x) ≤ 3n4, This is Our Default Case,
Then, Omega(n) = c'n4, is a set of functions with 2 ≤ c' ≤ 3

J'espère que cela a expliqué !!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.