2010-07-01 6 views
7

Possible en double:
Plain english explanation of Big OQu'est-ce que la notation Big-O? Comment trouvez-vous des chiffres comme O (n)?

J'imagine que cela est probablement quelque chose enseignée dans les classes, mais comme je un programmeur autodidacte, je ne l'ai vu, il est rare. J'ai compris que c'est quelque chose à voir avec le temps, et O (1) est le meilleur, alors que O (n^n) est très mauvais, mais quelqu'un pourrait-il me donner une explication de base de ce que il représente réellement, et d'où viennent ces chiffres?

+0

Copie possible http://stackoverflow.com/questions/487258/plain-french-explanation-of-big-o –

Répondre

4

Big O se réfère à l'ordre d'exécution le plus défavorable. Il est utilisé pour montrer à quel point un algorithme s'échelonne en fonction de la taille de l'ensemble de données (n-> nombre d'éléments). Puisque nous ne sommes concernés que par la commande, les multiplicateurs constants sont ignorés et tous les termes qui augmentent moins rapidement que le terme dominant sont également supprimés. Quelques exemples:

Une seule opération ou un ensemble d'opérations est O (1), car cela prend un certain temps (ne varie pas en fonction de la taille du jeu de données).

Une boucle est O (n). Chaque élément de l'ensemble de données est bouclé.

Une boucle imbriquée est O (n^2). Une boucle imbriquée imbriquée est O (n^3) et continue. Des choses comme la recherche d'arbre binaire sont log (n), ce qui est plus difficile à montrer, mais à chaque niveau dans l'arbre, le nombre de solutions possibles est divisé par deux, donc le nombre de niveaux est log (n) (fourni l'arbre est équilibré). Quelque chose comme de trouver la somme d'un ensemble de nombres qui est le plus proche d'une valeur donnée est O (n!), Puisque la somme de chaque sous-ensemble doit être calculée. C'est très mauvais.

+0

Vous pouvez également utiliser cette notation pour décrire le comportement spatial. – Gumbo

+1

-1 Ne doit pas être le pire des cas, Dans mon cours d'algorithmes de la dernière année, nous avons montré le Big O pour le pire des cas, le meilleur des cas, et si nous pouvions le comprendre, cas moyen. – Malfist

+0

Souvent, la notation Big O est un cas moyen. Nous disons que la recherche d'interpolation est O (log log n), mais dans le pire des cas, elle est O (n) si les valeurs sont suffisamment éloignées. http://en.wikipedia.org/wiki/Interpolation_search – Malfist

4

C'est une façon d'exprimer la complexité du temps. Pour n éléments dans une liste, il faut n calculs pour trier la liste. Ce qui n'est pas mal du tout. Chaque augmentation de n augmente linéairement la complexité temporelle.

O(n^n) est mauvaise, car la quantité de calcul nécessaire pour effectuer un tri (ou quoi que vous fassiez) augmentera exponentiellement à mesure que vous augmentez n.

O(1) est le meilleur, car cela signifie 1 calcul pour effectuer une fonction, pensez à des tables de hachage, la recherche d'une valeur dans une table de hachage a O(1) complexité de temps.

+2

En fait, ce n'est pas tout à fait exact. Il s'agit d'exprimer le taux auquel les coûts les plus défavorables augmentent. Ainsi, O (N) signifie que si le nombre d'éléments de données en cours de traitement double le pire des cas de traitement, les données seront doublées. Oh et et O (1) ne signifie pas "1 calcul" cela signifie que les coûts de calcul sont constants, quel que soit le nombre de points de données. Une table de hachage sans collision en est un bon exemple. – torak

1

La notation Big O appliquée à un algorithme fait référence à la manière dont le temps d'exécution de l'algorithme dépend de la quantité de données d'entrée. Par exemple, un algorithme de tri prendra plus de temps pour trier un grand ensemble de données qu'un petit ensemble de données. Si, pour l'exemple de l'algorithme de tri, vous représentez graphiquement le temps d'exécution (axe vertical) par rapport au nombre de valeurs à trier (axe horizontal), la nature de la ligne ou de la courbe qui en résulte dépend de l'algorithme de tri utilisé. La notation Big O est une méthode abrégée pour décrire la ligne ou la courbe.

En notation O grande, l'expression entre parenthèses est la fonction qui est représentée graphiquement.Si une variable (disons n) est incluse dans l'expression, cette variable fait référence à la taille de l'ensemble de données d'entrée. Vous dites O (1) est le meilleur. Cela est vrai car le graphe f (n) = 1 ne varie pas avec n. Un algorithme O (1) prend le même temps pour se terminer quelle que soit la taille de l'ensemble de données d'entrée. En revanche, le temps d'exécution d'un algorithme de O (n^n) augmente avec le carré de la taille de l'ensemble de données d'entrée. C'est l'idée de base, pour une explication détaillée, consultez la page wikipedia intitulée «Big O Notation».

Questions connexes