web-dev-qa-db-fra.com

Est-ce que O (log n) est toujours plus rapide que O(n)

S'il y a 2 algorithmes qui calculent le même résultat avec différentes complexités, O (log n) sera-t-il toujours plus rapide? Si oui, s'il vous plaît expliquer. BTW ce n'est pas une question d'affectation.

15
Varkolyn

Non. Si l'un des algorithmes s'exécute en N/100 et l'autre en (log N)*100, le second sera plus lent pour les tailles d'entrée plus petites. Les complexités asymptotiques concernent le comportement du temps d'exécution lorsque les tailles d'entrée vont à l'infini.

27
a3nm

Non, ce ne sera pas toujours plus rapide. MAIS, à mesure que la taille du problème augmente, à terme vous atteindrez toujours un point où l’algorithme O (log n) est plus rapide que celui O(n).

Dans des situations réelles, le point où l'algorithme O (log n) prend le pas sur l'algorithme O(n) intervient très rapidement. Il y a une grande différence entre O (log n) et O (n), tout comme il y a une grande différence entre O(n) et O (n ^ 2).

Si vous avez un jour la chance de lire Programming Pearls de Jon Bentley, il contient un chapitre génial dans lequel il oppose un algorithme O(n) à un algorithme de type O (n ^ 2), faisant tout possible de donner à O (n ^ 2) l'avantage. (Il code l’algorithme O (n ^ 2) en C sur un alpha et l’algorithme O(n) en interprétation BASIC sur une vieille Z80 ou quelque chose de 1MHz environ.) Il est surprenant de voir à quelle vitesse L'algorithme O(n) dépasse celui de O (n ^ 2).

Parfois, cependant, vous pouvez trouver un algorithme très complexe qui présente une complexité légèrement supérieure à celle d'un algorithme plus simple. Dans un tel cas, ne choisissez pas aveuglément l'algorithme avec un meilleur big-O - vous constaterez qu'il n'est que plus rapide sur des problèmes extrêmement volumineux.

16
Alex D

Pour l’entrée de taille n, un algorithme de O(n) effectuera les étapes proportionnelles à n, tandis qu'un autre algorithme de O(log(n)) effectuera les étapes grossièrement n).

Clairement log (n) est inférieur à n, d'où l'algorithme de complexité O(log(n)) est meilleur. Comme ce sera beaucoup plus rapide.

Plus de réponses de stackoverflow

0
Maulik Sakhida