Que signifie exactement O(log n) ?

Je suis en train d'apprendre les temps d'exécution et les temps amortis de la Notation Big O. Je comprends la notion de temps linéaire O(n), ce qui signifie que la taille de l'entrée affecte la croissance de l'algorithme de manière proportionnelle... et il en va de même pour, par exemple, le temps quadratique O(n2) etc... même les algorithmes, tels que les générateurs de permutation, avec des temps O(n !), qui croissent par factorielles.

Par exemple, la fonction suivante est O(n) car l'algorithme croît proportionnellement à son entrée n :

f(int n) {
  int i;
  for (i = 0; i < n; ++i)
    printf("%d", i);
}

De même, s'il y avait une boucle imbriquée, le temps serait O(n2).

Mais qu'est-ce que O(log n) exactement ? Par exemple, qu'est-ce que cela signifie de dire que la hauteur d'un arbre binaire complet est O(log n) ?

Je sais (peut-être pas en détail) ce qu'est le logarithme, dans le sens où : log10 100 = 2, mais je n'arrive pas à comprendre comment identifier une fonction avec un temps logarithmique.

Le temps d'exécution logarithmique (O(log n)) signifie essentiellement que le temps d'exécution croît proportionnellement au logarithme de la taille de l'entrée. Par exemple, si 10 éléments prennent au plus un certain temps x, que 100 éléments prennent au plus, disons, 2x, et que 10 000 éléments prennent au plus 4x, alors cela ressemble à une complexité temporelle O(log n).

Commentaires (10)

Cela signifie simplement que le temps nécessaire à cette tâche croît avec log(n) (exemple : 2s pour n = 10, 4s pour n = 100, ...). Lisez les articles de Wikipedia sur [l'algorithme de recherche binaire][1] et [la notation de Big O][2] pour plus de précisions.

[1] : http://en.wikipedia.org/wiki/Binary_search_algorithm [2] : http://en.wikipedia.org/wiki/Big_O_notation

Commentaires (0)

L'exemple binaire complet est O(ln n) car la recherche ressemble à ceci :

1 2 3 4 5 6 7 8 9 10 11 12

La recherche de 4 donne 3 résultats : 6, 3 puis 4. Et log2 12 = 3, ce qui est une bonne approximation du nombre d'occurrences nécessaires.

Commentaires (2)