web-dev-qa-db-fra.com

Différence entre O(n) et O(log(n)) - Quel est le meilleur et quel est exactement O (log (n))?

C’est mon premier cours sur les structures de données et chaque conférence/exposé d’assistance technique, nous parlons de O(log(n)). C'est probablement une question idiote, mais j'apprécierais que quelqu'un puisse m'expliquer exactement ce que cela signifie!?

39
ron

Cela signifie que la chose en question (généralement le temps d'exécution) est mise à l'échelle de manière cohérente avec le logarithme de sa taille d'entrée.

La notation Big-O ne signifie pas une équation exacte, mais plutôt une borne. Par exemple, la sortie des fonctions suivantes est tout O (n):

f(x) = 3x
g(x) = 0.5x
m(x) = x + 5

Comme vous augmentez x, leurs sorties augmentent toutes linéairement - s'il existe un rapport 6: 1 entre f(n) et g(n), il y aura également un rapport environ 6: 1 entre f(10*n) et g(10*n) et ainsi de suite.


Pour savoir si O(n) ou O(log n) est préférable, considérez: si n = 1000, alors log n = 3 (pour log-base-10). Que préféreriez-vous que votre algorithme prenne pour s'exécuter: 1 000 secondes ou 3 secondes?

63
Amber

Pour la saisie de taille n, un algorithme de O(n) effectuera les étapes de manière continue à n, tandis qu'un autre algorithme de O(log(n)) exécutera les étapes à peu près log(n)

Clairement, log(n) est plus petit que n et, par conséquent, un algorithme de complexité O(log(n)) est meilleur. Puisque ce sera beaucoup plus rapide.

9
anuragsn7
1
user1311390

O (logn) signifie que la durée d'exécution maximale de l'algorithme est proportionnelle au logarithme de la taille d'entrée . O (n) signifie que la durée d'exécution maximale de l'algorithme est proportionnelle à la taille d'entrée.

fondamentalement, O(something) est une limite supérieure sur le nombre d'instructions de l'algorithme (atomiques). Par conséquent, O(logn) est plus étroit que O(n) et est également meilleur en termes d'analyse d'algorithmes. Mais tous les algorithmes qui sont O(logn) sont aussi O (n), mais pas en arrière ...

1
Eyal

Définition formelle:

g (x) = O(f(x)) <=> il existe x0 et la constante C que pour tout x> x0, | g (x) | <= C | f (x) |.

Ainsi, si vous trouvez l'algorithme A pour le problème P dont la complexité est O (f (n)), Vous pouvez dire que le nombre d'étapes que votre algorithme effectuera est inférieur ou égal asymptotiquement à f (n), lorsque n est généralement la taille d'entrée. (n peut être n'importe quoi)

Pour en savoir plus: http: //en.wikipedia.org/wiki/Big_O_notation.

0
barak1412