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.

Usuellement 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

NomTemps de calcul (T(n))Exemple de temps de calculExemple d'algorithmes
ConstantO(1)10Diminution d'une clé dans un tas de Fibonacci
LogarithmiqueO(log n)log n, log(n2)Recherche dichotomique
LinéaireO(n)nRecherche séquentielle, algorithme simple de recherche du plus petit élément d'un tableau
LinéarithmiqueO(n log n)n log n, log n!Tri fusion
QuadratiqueO(n2)n2Tri par insertion
CubiqueO(n3)n3Algorithme naïf de multiplication matricielle.
Polynomial2O(log n) = poly(n)n, n log n, n10Algorithme de Karmarkar, test de primalité AKS
Sous-exponentiel2o(n)2n1/3Meilleurs algorithmes pour la factorisation des entiers
Exponentiel2O(n)1.1n, 10nAlgorithme 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[3].

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

  1. 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.
  2. Sylvain Perifel, Complexité algorithmique, Ellipses, , 432 p. (ISBN 9782729886929, lire en ligne), chap. 2.1 (« Temps déterministe »).
  3. (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 ».
  • Portail de l'informatique théorique
Cet article est issu de Wikipedia. Le texte est sous licence Creative Commons - Attribution - Partage dans les Mêmes. Des conditions supplémentaires peuvent s'appliquer aux fichiers multimédias.