web-dev-qa-db-fra.com

Big-oh vs big-theta

Duplicate possible:
Quelle est la différence entre (n) et O (n)?

Il me semble que lorsque les gens parlent de manière informelle de la complexité des algorithmes, ils parlent de big-oh. Mais dans les situations formelles, je vois souvent big-theta avec des big-oh occasionnels. Je sais mathématiquement quelle est la différence entre les deux, mais en anglais, dans quelle situation utiliser big-oh quand vous voulez dire big-theta be incorrect, ou vice versa (un exemple d'algorithme serait apprécié)?

Bonus: pourquoi les gens utilisent-ils apparemment toujours gros-oh quand ils parlent de manière informelle?

90
Boris Yeltz

Big-O est une limite supérieure.

Big-Theta est une limite étroite, c'est-à-dire une limite supérieure et inférieure.

Lorsque les gens ne se préoccupent que du pire qui puisse arriver, big-O suffit. c'est-à-dire qu'il dit "ça ne peut pas être pire que ça". Bien sûr, plus le rapprochement est serré, meilleur est le calcul, mais un resserrement étroit.

Voir également

Questions connexes


La citation suivante de Wikipedia apporte également un peu de lumière:

De manière informelle, en particulier en informatique, il est souvent permis d’abuser quelque peu de la notation Big O pour décrire une liaison asymptotique où l’utilisation de la notation Big Theta pourrait être plus appropriée dans les faits dans un contexte donné.

Par exemple, lorsqu’on considère une fonction T(n) = 73n3+ 22n2+ 58, Tous les éléments suivants sont généralement acceptables, mais le resserrement des liens (c'est-à-dire les puces 2 et 3 ci-dessous) est généralement fortement préféré au laxisme des liens (c'est-à-dire le point 1 ci-dessous).

  1. T(n) = O(n100), Qui est identique à T(n) ∈ O(n100)
  2. T(n) = O(n3), Qui est identique à T(n) ∈ O(n3)
  3. T(n) = Θ(n3), Qui est identique à T(n) ∈ Θ(n3)

Les déclarations équivalentes en anglais sont respectivement:

  1. T(n) ne croît pas asymptotiquement plus vite que n100
  2. T(n) ne croît pas asymptotiquement plus vite que n3
  3. T(n) croît asymptotiquement aussi vite que n3.

Ainsi, bien que les trois déclarations soient vraies, elles contiennent progressivement plus d’informations. Toutefois, dans certains champs, la notation Big O (nombre de balles 2 dans les listes ci-dessus) serait utilisée plus couramment que la notation Big Theta (numéro de puce 3 dans les listes ci-dessus), car les fonctions dont la croissance est plus lente sont plus souhaitables.

93
polygenelubricants

Je suis mathématicien et j’ai vu et utilisé maintes et maintes fois la notation big-O, big-thêta et big-oméga, et pas seulement pour la complexité des algorithmes. Comme on dit, big-Theta est une liaison bilatérale. À proprement parler, vous devriez l'utiliser quand vous voulez expliquer que tel est le rôle d'un algorithme et que cet algorithme ne peut pas faire mieux ou qu'aucun algorithme ne peut faire mieux. Par exemple, si vous dites "Le tri nécessite des comparaisons Θ (n (log n)) pour la pire des entrées", vous expliquez qu'il existe un algorithme de tri qui utilise des comparaisons O (n (log n)) pour toutes les entrées. ; et que pour chaque algorithme de tri, il existe une entrée qui l'oblige à effectuer des comparaisons de Ω (n (log n)).

Maintenant, une raison étroite pour laquelle les gens utilisent O au lieu de Ω est de supprimer les clauses de non-responsabilité concernant les cas les plus graves ou les plus graves. Si vous dites "le tri nécessite des comparaisons O (n (log n))", l'instruction reste valable pour une entrée favorable. Une autre raison étroite est que même si un algorithme pour faire X prend du temps (f (n)), un autre algorithme pourrait faire mieux, vous pouvez donc seulement dire que la complexité de X elle-même est O (f (n)).

Cependant, il existe une raison plus large pour que les gens utilisent O de manière informelle. Au niveau humain, il est difficile de toujours faire des déclarations à double sens lorsque le côté opposé est "évident" dans son contexte. Comme je suis mathématicien, je ferais toujours bien de dire "je prendrai un parapluie si et seulement s'il pleut" ou "je peux jongler avec 4 balles mais pas 5", au lieu de "je prendrai un parapluie si "ou je peux jongler avec 4 balles". Mais les autres moitiés de telles déclarations sont souvent manifestement prévues ou manifestement non visées. C'est juste la nature humaine d'être négligente à propos de l'évidence. C'est déroutant de couper les cheveux en deux.

Malheureusement, dans un domaine aussi rigoureux que celui des mathématiques ou de la théorie des algorithmes, il est également déconcertant de ne pas couper les cheveux en quatre. Les gens diront inévitablement O alors qu'ils auraient dû dire Ω ou. Ignorer des détails parce qu’ils sont "évidents" conduit toujours à des malentendus. Il n'y a pas de solution pour ça.

46
Greg Kuperberg

Parce que mon clavier a une touche O.
Il n'a pas de touche Θ ou Ω.

Je pense que la plupart des gens sont pareillement paresseux et utilisent O quand ils veulent dire Θ car il est plus facile de taper.

17
Ax.

Une des raisons pour lesquelles Big O est tellement utilisé est un peu parce qu’il est tellement utilisé. Beaucoup de gens voient la notation et pensent qu'ils savent ce que cela signifie, puis l'utilisent (à tort) eux-mêmes. Cela arrive souvent chez les programmeurs dont l’éducation formelle n’a été jusqu’à présent jusqu’à présent - j’ai déjà été coupable.

Une autre est qu'il est plus facile de taper un gros O sur la plupart des claviers non grecs qu'un gros thêta.

Mais je pense que beaucoup est dû à une sorte de paranoïa. J'ai un peu travaillé dans la programmation liée à la défense (et je ne savais pas grand-chose à propos de l'analyse algorithmique à l'époque). Dans ce scénario, la performance dans le pire des cas correspond toujours à ce qui intéresse les gens, car ce pire pourrait se produire au mauvais moment. Peu importe si la probabilité que cela se produise est par exemple beaucoup moins que la probabilité que tous les membres d’un équipage de navire subissent une crise cardiaque soudaine au même moment - il pourrait se produire encore.

Bien sûr, de nombreux algorithmes ont leur cas le plus défavorable dans des circonstances très courantes - l'exemple classique étant l'insertion dans l'ordre dans un arbre binaire pour obtenir ce qui est effectivement une liste à lien unique. Une évaluation "réelle" de la performance moyenne doit prendre en compte la fréquence relative des différents types d’intrants.

8
Steve314

Bonus: pourquoi les gens utilisent-ils apparemment toujours gros-oh quand ils parlent de manière informelle?

Parce qu'en gros-oh, cette boucle:

for i = 1 to n do
    something in O(1) that doesn't change n and i and isn't a jump

est O(n), O(n^2), O(n^3), O(n^1423424). big-oh est juste une limite supérieure, ce qui facilite le calcul car vous n'avez pas à trouver une limite étroite.

La boucle ci-dessus est seulement big-theta(n) cependant.

Quelle est la complexité de la tamis d'eratosthenes ? Si vous disiez O(n log n), vous ne vous tromperiez pas, mais ce ne serait pas non plus la meilleure réponse. Si vous disiez big-theta(n log n), vous auriez tort.

5
IVlad

Parce qu'il existe des algorithmes dont le meilleur des cas est rapide, et donc techniquement, c'est un gros O, pas un grand Theta.

Big O est un borne supérieure, Big Theta est un relation d'équivalence.

3
Alexandre C.

Il y a beaucoup de bonnes réponses ici mais j'ai remarqué qu'il manquait quelque chose. La plupart des réponses semblent impliquer que la raison pour laquelle les gens utilisent Big O sur Big Theta est un problème, et dans certains cas, cela peut être vrai. Souvent, une preuve menant à un résultat Big Theta est beaucoup plus complexe que celle qui aboutit à Big O. Cela est généralement vrai, mais je ne pense pas que cela ait un rapport important à l’utilisation d’une analyse sur l’autre.

Quand on parle de complexité, on peut dire beaucoup de choses. La complexité temporelle de Big O nous indique simplement en quoi un algorithme est exécuté, une limite supérieure. Big Omega est beaucoup moins souvent discuté et nous indique le temps minimum pendant lequel un algorithme est garanti, une limite inférieure. Maintenant, Big Theta nous dit que ces deux chiffres sont en fait les mêmes pour une analyse donnée. Cela nous indique que l'application a un temps d'exécution très strict, qui ne peut différer que d'une valeur asymptotiquement inférieure à notre complexité. De nombreux algorithmes n'ont tout simplement pas de bornes supérieure et inférieure qui se trouvent être asymptotiquement équivalentes.

Donc, pour ce qui est de votre question, utiliser Big O à la place de Big Theta serait techniquement toujours valable, tandis que l’utilisation de Big Theta à la place de Big O ne serait valable que lorsque Big O et Big Omega seraient égaux. Par exemple, le tri par insertion a une complexité temporelle de Big О à n ^ 2, mais le meilleur scénario possible est celui de Big Omega à n. Dans ce cas, il ne serait pas correct de dire que sa complexité temporelle est Big Theta de n ou n ^ 2 car il s'agit de deux bornes différentes et doivent être traitées comme telles.

1
Daynew

J'ai vu Big Theta et je suis sûr que la différence a été enseignée à l'école. Je devais cependant le regarder. C'est ce que dit Wikipedia:

Big O est la notation asymptotique la plus couramment utilisée pour comparer les fonctions, bien que dans de nombreux cas, Big O puisse être remplacé par Big Theta Θ pour des limites plus étroites asymptotiquement.

Source: Big O Notation # Notation asymptotique liée

Je ne sais pas pourquoi les gens utilisent Big-O lorsqu'ils parlent officiellement. Peut-être est-ce parce que la plupart des gens connaissent mieux Big-O que Big-Theta? J'avais oublié que Big-Theta existait jusqu'à ce que vous me le rappeliez. Bien que ma mémoire soit rafraîchie, il est possible que je l’utilise en conversation. :)

0
Vivin Paliath