Comment O et Ω sont-ils liés au pire et au meilleur des cas?


33

Aujourd'hui, nous avons discuté dans une conférence d'un algorithme très simple pour trouver un élément dans un tableau trié à l'aide de la recherche binaire . On nous a demandé de déterminer sa complexité asymptotique pour un tableau de éléments.n

Mon idée était que c'est visiblement , ou pour être plus précis car est le nombre d'opérations dans le pire des cas. Mais je peux faire mieux, par exemple si je frappe l'élément recherché la première fois - alors la limite inférieure est .O(logn)O(log2n)log2nΩ(1)

Le conférencier a présenté la solution sous la forme car nous ne considérons généralement que les entrées du pire des cas pour les algorithmes.Θ(logn)

Mais si l'on considère uniquement les pires cas, quel est l'intérêt d'avoir et -notation lorsque tous les pires cas du problème donné ont la même complexité ( serait tout ce dont nous avons besoin, non?).OΩΘ

Qu'est-ce que j'oublie ici?


@Smaji: Que voulez-vous dire par "Mais si l'on considère uniquement les pires cas, quel est l'intérêt d'avoir un grand O et une grande notation Omega lorsque tous les pires cas ont + - la même complexité (Theta serait tout ce dont nous avons besoin, non?)." veuillez le clarifier.
tanmoy

@Smajl: Je pense que votre question est: Quelle est la nécessité de la notation Big O et Big Omega dans l'analyse algorithmique? Ai-je raison?
tanmoy

5
O(log2n) n'est pas plus spécifique que O(logn) , ils désignent la même classe de fonctions.
Raphael

log2(n) est identique à log(b)/log(2)×logb(n) donc le 2 indique juste un facteur, qui peut être supprimé (comme d'autres facteurs dans big-O.
ctrl-alt-delor

Réponses:


39

La notation de Landau indique des bornes asymptotiques sur les fonctions . Voir ici pour une explication des différences entre O , Ω et Θ .

Le pire, le meilleur, le temps moyen ou le nom de votre cas décrit des fonctions d'exécution distinctes: une pour la séquence d'exécution la plus élevée d'un donné , une pour celle du plus bas, etc.n

En soi, les deux n'ont rien à voir l'un avec l'autre. Les définitions sont indépendantes. Nous pouvons maintenant aller de l'avant et formuler des limites asymptotiques sur les fonctions d'exécution: supérieure ( ), inférieure ( ) ou les deux ( ). Nous pouvons le faire pour le pire, le meilleur ou tout autre cas.Ω ΘOΩΘ

Par exemple, dans la recherche binaire, nous obtenons une asymptotique d'exécution dans le meilleur des cas de et une asymptotique dans le pire des cas de .Θ ( log n )Θ(1)Θ(logn)


Le principal point à retenir pour moi est que nous pouvons faire la pire des meilleures analyses sur n'importe quelle fonction bornée asymptotique. Pour moi, cela montre l'indépendance de Big O par rapport à l'analyse du pire des cas. Merci!
Patrick

1
@Patrick Pas tout à fait. Tout d'abord, vous décidez si vous souhaitez analyser le pire, le moyen ou le meilleur des cas. Ensuite, vous arrivez avec la fonction de coût (ou aussi bonne approximation que possible). Ce n'est qu'alors que vous prenez des asymptotiques, le cas échéant.
Raphael

17

Considérez l'algorithme suivant (ou procédure, ou morceau de code, ou autre):

Contrive(n)
1. if n = 0 then do something Theta(n^3)
2. else if n is even then
3.    flip a coin
4.    if heads, do something Theta(n)
5.    else if tails, do something Theta(n^2)
6. else if n is odd then
7.    flip a coin
8.    if heads, do something Theta(n^4)
9.    else if tails, do something Theta(n^5)

Quel est le comportement asymptotique de cette fonction?

Dans le meilleur des cas (où est pair), le runtime est et , mais pas de quoi que ce soit.Ω ( n ) O ( n 2 ) ΘnΩ(n)O(n2)Θ

Dans le pire des cas (où est impair), le runtime est et , mais pas .Ω ( n 4 ) O ( n 5 ) ΘnΩ(n4)O(n5)Θ

Dans le cas , le runtime est .Θ ( n 3 )n=0Θ(n3)

Ceci est un peu un exemple artificiel, mais uniquement dans le but de démontrer clairement les différences entre le lié et le cas. Vous pourriez faire en sorte que la distinction devienne significative avec des procédures complètement déterministes, si les activités que vous effectuez n'ont pas de limites connues .Θ


1
nmod4

4

Pas nécessairement. Dans ce cas, à savoir la recherche binaire sur un tableau trié, vous pouvez voir que: (a) la recherche binaire prend au plus étapes; (b) il y a des entrées qui forcent réellement autant d'étapes. Donc, si est le temps d'exécution sur une entrée du pire des cas pour la recherche binaire, vous pouvez dire que .T ( n ) T ( n ) = Θ ( log n )[logn+1]T(n)T(n)=Θ(logn)

D'un autre côté, pour d'autres algorithmes, vous pourriez ne pas être en mesure de calculer exactement, auquel cas vous pourriez avoir un écart entre les limites supérieure et inférieure pour le temps d'exécution sur une entrée du pire des cas.T(n)

Maintenant, pour rechercher un tableau trié, quelque chose de plus est vrai, c'est que tout algorithme pour rechercher un tableau trié doit inspecter . Pour ce type de borne inférieure, vous devez cependant analyser le problème lui-même. (Voici l'idée: à tout moment, un algorithme de recherche n'a pas exclu un ensemble de positions où l'élément qu'il recherche peut être. Une entrée soigneusement conçue peut alors garantir que est réduit d'un facteur au maximum .)S [ n ] | S | 2[logn+1]S[n]|S|2


1

Vous avez raison, beaucoup de gens utilisent bâclement quand ils devraient utiliser . Par exemple, un analyste d'algorithme peut se retrouver avec une fonction temporelle et conclure immédiatement que , ce qui est techniquement correct , mais une assertion plus précise serait . J'attribue ce comportement inconscient à deux raisons. Premièrement, beaucoup considèrent comme plus populaire et plus acceptable, peut-être en raison de sa longue histoire. Rappelons qu'il a été introduit il y a plus d'un siècle, alors que (et ) n'ont été introduits qu'en 1976 (par Donald Knuth). Deuxièmement, cela pourrait être dû au fait queOΘT(n)=n2+n+2T(n)=O(n2)T(n)=Θ(n2)OΘΩOest facilement disponible sur le clavier, contrairement à !Θ

D'un point de vue technique, cependant, la principale raison pour laquelle les analystes prudents préfèrent utiliser over est que le premier couvre "un territoire plus grand" que le second. Si nous prenons votre exemple de recherche binaire et voulons utiliser , nous devrons faire deux assertions: \ une pour le meilleur cas, à savoir , et une autre pour le pire, à savoir . Avec , nous faisons une seule assertion, à savoir . Mathématiquement, les fonctions couvertes par sont également couvertes par , alors que l'inverse n'est pas nécessairement vrai.OΘΘΘ(1)Θ(logn)OO(logn)ΘO


O(logn)Θ(logn)

@Raphael Je vous renvoie aux définitions des deux notations. De plus, sachez qu'ils sont utilisés pour classer le "taux de croissance" asymptotique du temps de course, et non le temps de course lui-même tel que propagé par vos différentes réponses et commentaires.
Hamed Nassar
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.