2010-10-31 5 views
3

Le manuel de "Rogue Algorithms for Wizards" de Snape revendique le temps de fusion sort est O (n^4). Cette affirmation est-elle correcte?Temps d'exécution de Mergesort BigO

Solution: Oui. Cette affirmation est techniquement correcte, car O (n^4) ne donne qu'un supérieur pour la durée de l'algorithme. Cependant, c'est une réponse désagréablement inutile, puisque la limite serrée est Θ(n log n).

Je ne comprends pas très bien ce que dit la solution. Comment O (n^4) peut-il être correct?

Répondre

5

La notation Big O est une valeur supérieure dans le pire des cas pour un algorithme d'exécution.

Comme O (n^4) est au-dessus du pire cas de mergesort, il est techniquement correct car il fournit une limite - ie. Mergesort n'aura jamais une performance pire que O (n^4).

Cependant, il est inutile parce qu'une meilleure expression du temps d'exécution est O (n log n), qui est le « plus serré » lié pour le tri par fusion

+0

Ahh ok je vois..so O (n^1000) serait aussi 'techniquement' correct? – Snowman

+0

Oui, car il est vrai que vous n'obtiendrez jamais une performance pire que O (n^1000) de mergesort – Martin

+0

Oui, O (n^1000) est une autre limite supérieure encore moins utile. – Thilo

1

Big-O est un ensemble, qui comprend tout ce qui fonctionne aussi vite que (foo) ou plus vite. Little-O est un ensemble de choses qui s'exécutent plus vite que (foo). Bien qu'il soit correct de dire que mergesort est O (n^4), ce n'est pas très utile, parce que c'est Theta (n log n). Dire que mergesort est o (n^4) est marginalement plus utile, parce que la notation little-o n'est jamais utilisée pour impliquer un runtime big-theta.

Encore plus compliqué, big-O est souvent utilisé lorsque big-theta serait plus approprié, juste parce que la plupart des claviers n'ont pas de thêta.

+1

Oui, il s'agit simplement d'une habitude CS (enracinée, institutionnalisée) d'écrire f (n) = O (n^2) ou similaire - dès le début, il aurait dû être écrit en utilisant le symbole d'appartenance au lieu d'un signe égal , mais il est trop tard pour cela maintenant, il semble. –