Calculateur de croissance en notation grand O
Données
| Taille de l'entrée n | 20 |
|---|
Calculateur de croissance en notation grand O
Saisissez une taille d'entrée n pour comparer le nombre d'opérations requis par chaque classe de complexité temporelle courante — de O(log n) à O(n!).
Données
Taille de l'entrée
Résultats
Saisissez une valeur pour afficher les résultats.
Complexités courantes
Croissances extrêmes
Croissance en notation grand O
La notation grand O classe la façon dont les besoins en ressources d'un algorithme évoluent avec la taille de l'entrée. Plutôt que de mesurer des secondes sur une machine particulière, elle capture la forme de cette croissance : le travail double-t-il quand n double, ou quadruple-t-il ? Les six classes de complexité ci-dessous sont celles que l'on rencontre le plus souvent dans les manuels et les entretiens techniques.
Les six classes courantes
O(log n) — Logarithmique. Chaque étape élimine une fraction constante du travail restant. La recherche dichotomique dans un tableau trié d'un milliard d'éléments ne demande que 30 comparaisons, car elle divise l'espace de recherche par deux à chaque étape. Les recherches dans les arbres binaires équilibrés et de nombreuses récurrences de type « diviser pour régner » entrent dans cette classe.
O(n) — Linéaire. Le travail croît en proportion directe de la taille de l'entrée. Un parcours unique d'un tableau pour en trouver le maximum, le comptage de caractères dans une chaîne ou la lecture de chaque élément d'une liste sont tous linéaires. Les algorithmes linéaires sont généralement considérés comme efficaces.
O(n log n) — Linéarithmique. La classe la plus courante pour le tri. Le tri fusion, le tri par tas et Timsort (utilisé en Python et en Java) atteignent tous O(n log n), qui est aussi la borne inférieure théorique du tri par comparaison. Pour , cela représente environ vingt millions d'opérations — rapide en pratique.
O(n²) — Quadratique. Deux boucles imbriquées sur l'entrée. Le tri à bulles, le tri par insertion et la multiplication naïve de matrices ont tous un pire des cas en O(n²). Pour , cela représente cent millions d'opérations ; pour , mille milliards — impraticable pour des données volumineuses.
O(2ⁿ) — Exponentiel. Le travail double à chaque élément supplémentaire. L'algorithme de Fibonacci récursif naïf recalcule les sous-problèmes de façon exponentielle ; l'énumération par force brute de tous les sous-ensembles d'un ensemble croît également en . Pour n = 40, le comptage dépasse mille milliards.
O(n!) — Factoriel. La classe à croissance la plus rapide dans l'analyse algorithmique courante. Les solutions par force brute aux problèmes de permutation — l'énumération de toutes les tournées possibles dans le problème du voyageur de commerce — effectuent une opération par permutation, et il existe permutations au total. Pour n = 20, le comptage dépasse deux milliards de milliards d'opérations.
Exemple numérique pour n = 20
Le rapport entre O(n log n) et O(n!) pour n = 20 est d'environ — la différence entre un tri rapide et une attente supérieure à l'âge de l'univers.
Repères pratiques
Les constantes et les effets de cache comptent pour les petites entrées ; la complexité domine pour les grandes. Un seuil de l'ordre de n = 10 000 est celui à partir duquel O(n²) commence à poser problème sur du matériel moderne (pour des opérations simples). Au-delà de n = 10^6, un algorithme O(n log n) ou mieux est généralement nécessaire. Les algorithmes exponentiels et factoriels requièrent des approximations, de la programmation dynamique ou des stratégies d'élagage pour tout problème réel.
Convertisseur de base numérique est utile pour travailler avec les représentations binaires de l'espace d'entrée.
Questions fréquentes (FAQ)
Que mesure réellement la notation grand O ?
La notation grand O décrit la borne supérieure de la croissance du temps d'exécution (ou de la mémoire utilisée) d'un algorithme en fonction de la taille de l'entrée n. Elle ignore délibérément les facteurs constants et les termes d'ordre inférieur, car ceux-ci importent moins à mesure que n grandit.
Un algorithme O(n²) finira toujours par dépasser un algorithme O(n log n) pour des entrées suffisamment grandes, quelle que soit la vitesse du matériel. La notation grand O est un outil de comparaison des conceptions d'algorithmes — non une prédiction précise du temps d'exécution réel.
Pourquoi utilise-t-on le logarithme en base 2 ?
La plupart des algorithmes de type « diviser pour régner » (recherche dichotomique, tri fusion, arbres binaires équilibrés) divisent leur travail par deux à chaque étape, de sorte que la profondeur de cette division est log₂ n. Dans l'analyse en grand O, la base du logarithme n'est qu'un facteur constant et ne change pas la classe de complexité — log₂ n et log₁₀ n ne diffèrent que d'une constante.
Mais la base 2 est conventionnelle en informatique en raison de la division binaire. Ce calculateur utilise la base 2 pour respecter cette convention.
À partir de quelle taille d'entrée la complexité commence-t-elle à compter ?
Pour des entrées réduites, disons n < 50, un algorithme O(n²) bien optimisé surpasse souvent un algorithme O(n log n) théoriquement plus rapide, car il présente une constante plus faible et un meilleur comportement vis-à-vis du cache. La complexité commence à dominer une fois que n atteint quelques centaines ou quelques milliers.
Pour n = 1 000, un tri O(n log n) effectue environ 10 000 comparaisons tandis qu'un tri O(n²) en effectue 1 000 000. Pour n = 1 000 000, l'écart passe d'un milliard à mille milliards — la complexité devient alors le seul facteur déterminant.
Les algorithmes O(n!) sont-ils utilisés en pratique ?
Les algorithmes O(n!) sont irréalisables pour toutes les entrées sauf les plus petites. Pour n = 20, n! dépasse deux milliards de milliards d'opérations — bien au-delà de ce qu'un ordinateur peut accomplir en une vie humaine.
En pratique, les problèmes NP-difficiles comme le problème du voyageur de commerce sont résolus par des algorithmes d'approximation, des heuristiques ou de la programmation dynamique, qui évitent d'énumérer toutes les permutations. La colonne factorielle de ce calculateur illustre précisément pourquoi ces techniques d'approximation existent.