Complexité en temps
En algorithmique, la complexité en temps est une mesure du temps utilisé par un algorithme, exprimé comme fonction de la taille de l'entrée. Le temps compte le nombre d'étapes de calcul avant d'arriver à un résultat.
Habituellement, le temps correspondant Ă des entrĂ©es de taille n est le temps le plus long parmi les temps dâexĂ©cution des entrĂ©es de cette taille ; on parle de complexitĂ© dans le pire cas. Les Ă©tudes de complexitĂ© portent dans la majoritĂ© des cas sur le comportement asymptotique, lorsque la taille des entrĂ©es tend vers l'infini, et l'on utilise couramment les notations grand O de Landau.
La complexité en temps étant la mesure la plus courante en algorithmique, on parle parfois simplement de la complexité d'un algorithme, mais il existe d'autres mesures comme la complexité en espace.
Calculer les complexitĂ©s d'un algorithme, et en particulier la complexitĂ© en temps est parfois complexe, et cette Ă©tude constitue en elle-mĂȘme une discipline : l'analyse de la complexitĂ© des algorithmes.
DĂ©finitions
La complexité en temps compte le nombre d'étapes de calcul. Il y a plusieurs façons de définir ces étapes, par exemple le nombre d'opérations dans une machine RAM[1], ou des mesures plus théoriques comme le nombre de comparaisons dans le cas d'un algorithme de tri ou le nombre de pas d'une machine de Turing.
L'étude du temps de calcul consiste souvent à donner une borne supérieure sur le nombre d'étapes, exprimée par un ordre de grandeur. Par exemple dans le cas de l'algorithme tri fusion, on parle d'une complexité en , ce qui signifie qu'il existe une constante telle que pour toute entrée de taille le nombre d'étapes sera inférieur à .
Le temps, comme défini plus haut, est lié au temps de calcul réel mais c'est une mesure plus abstraite, qui dépend de l'algorithme et de l'entrée mais est indépendante de la puissance de l'ordinateur par exemple (on compte des étapes de calcul et non des secondes)[2].
Liste de complexités en temps classiques
Nom | Temps de calcul (T(n)) | Exemple de temps de calcul | Exemple d'algorithmes |
---|---|---|---|
Constant | O(1) | 10 | Diminution d'une clé dans un tas de Fibonacci |
Logarithmique | O(log n) | log n, log(n2) | Recherche dichotomique |
Linéaire | O(n) | n | Recherche séquentielle, algorithme simple de recherche du plus petit élément d'un tableau |
Linéarithmique | O(n log n) | n log n, log n! | Tri fusion |
Quadratique | O(n2) | n2 | Tri par insertion |
Cubique | O(n3) | n3 | Algorithme naĂŻf de multiplication matricielle. |
Polynomial | 2O(log n) = poly(n) | n, n log n, n10 | Algorithme de Karmarkar, test de primalité AKS |
Quasipolynomial | 2O((log n)O(1)) | nlog n | Test d'isomorphisme de graphes de Babai[3] |
Sous-exponentiel | 2o(n) | 2n1/3 | Meilleurs algorithmes pour la factorisation des entiers |
Exponentiel | 2O(n) | 1.1n, 10n | Algorithme en force brute, par exemple pour le problĂšme du voyageur de commerce |
Lien avec la théorie de la complexité des problÚmes
La théorie de la complexité des problÚmes, souvent abrégée en théorie de la complexité, est la discipline qui consiste à classer les problÚmes algorithmiques par difficulté selon diverses mesures. Certaines classes de complexité sont définies par le temps de calcul, par exemple les problÚmes de la classe P sont ceux pour lequel il existe un algorithme dont la complexité en temps est bornée par un polynÎme[4].
Parmi les classes de problĂšmes dĂ©finie par du temps, on compte notamment P, NP et EXPTIME. En sâintĂ©ressant aux algorithmes probabilistes, on obtient des classes comme BPP.
Mesures de complexité alternatives
Une alternative à la complexité dans le pire cas, est de calculer la complexité en moyenne d'un algorithme, c'est-à -dire le temps que mettra l'algorithme en moyenne sur une entrée tirée au hasard, par exemple selon la distribution uniforme. On peut aussi citer l'analyse lisse d'algorithme et la complexité générique.
Certaines mesures de complexités ne sont pas directement liées au temps de calcul, c'est par exemple le cas de la complexité en espace, c'est-à -dire la mesure de la mémoire nécessaire pour faire un calcul.
Notes et références
- Voir (en) Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest et Clifford Stein, Introduction to Algorithms, MIT Press, , 3e Ă©d. [dĂ©tail de lâĂ©dition], chap. 2.2, p. 23.
- Sylvain Perifel, Complexité algorithmique, Ellipses, , 432 p. (ISBN 9782729886929, lire en ligne), chap. 2.1 (« Temps déterministe »).
- Isomorphismes de graphes en temps quasi-polynomial, Harald Helfgott, 2017 lire en ligne
- (en) Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest et Clifford Stein, Introduction to Algorithms, MIT Press, , 3e Ă©d. [dĂ©tail de lâĂ©dition], chap. 34, « NP-Completeness ».