Voici une autre façon de le dire. Supposons que votre algorithme soit linéaire en nombre de chiffres dans la taille du problème.
Ainsi, vous avez peut-être un nouvel algorithme pour factoriser un grand nombre, que vous pouvez montrer comme étant linéaire dans le nombre de chiffres. Un nombre à 20 chiffres prend ainsi deux fois plus de temps qu'un facteur à 10 chiffres en utilisant votre algorithme. Cela aurait une complexité de log. (Et cela vaut quelque chose pour l'inventeur.)
La sectionnement a le même comportement. Il faut environ 10 étapes de bissection pour réduire la longueur de l'intervalle d'un facteur de 1024 = 2^10, mais seulement 20 pas couperont l'intervalle d'un facteur de 2^20.
La complexité du journal ne signifie pas toujours qu'un algorithme est rapide sur tous les problèmes. Le facteur linéaire devant l'O (log (n)) peut être important. Donc votre algorithme peut être terrible sur de petits problèmes, ne pas devenir utile jusqu'à ce que la taille du problème soit sensiblement grande que d'autres algorithmes meurent d'une mort exponentielle (ou polynomiale).
+1 très intéressant. Je cherche quelque chose comme vos exemples plus. Est-ce que l'algorithme logartihmique est: for (int i = BIG_number; i> N; i * = 1/2) {...} –
1/2 est zéro en division entière, mais si vous utilisez "i/= 2" à la place , Oui, ça l'est. (Si c'est l'algorithme particulier que vous vous posez, cela aurait peut-être été une bonne idée de l'inclure dans votre question.) –