Article de reference

Complexité temporelle

Graphiques de fonctions couramment utilisées dans l' analyse des algorithmes , montrant le nombre d'opérations N en fonction de la taille n des données d'entrée pour chaque fonc...

Graphiques de fonctions couramment utilisées dans l' analyse des algorithmes , montrant le nombre d'opérations N en fonction de la taille n des données d'entrée pour chaque fonction.

En informatique théorique , la complexité temporelle désigne la complexité de calcul qui décrit le temps d'exécution d'un algorithme . Elle est généralement estimée en comptant le nombre d'opérations élémentaires effectuées par l'algorithme, en supposant que chaque opération élémentaire a une durée d'exécution fixe. Ainsi, la durée d'exécution et le nombre d'opérations élémentaires sont liés par un facteur constant .

Comme le temps d'exécution d'un algorithme peut varier pour des entrées de même taille, on considère généralement la complexité temporelle dans le pire des cas , c'est-à-dire le temps maximal requis pour des entrées d'une taille donnée. Moins courante, et généralement spécifiée explicitement, est la complexité temporelle moyenne , qui correspond au temps moyen d'exécution pour des entrées d'une taille donnée (ce qui est logique puisqu'il n'existe qu'un nombre fini d'entrées possibles de cette taille). Dans les deux cas, la complexité temporelle est généralement exprimée en fonction de la taille de l'entrée. Cette fonction étant généralement difficile à calculer exactement, et le temps d'exécution pour les petites entrées étant généralement négligeable, on s'intéresse généralement au comportement de la complexité lorsque la taille de l'entrée augmente, c'est-à-dire à son comportement asymptotique . Par conséquent, la complexité temporelle est généralement exprimée à l'aide de la notation grand O. etc., où bits nécessaire pour représenter l'entrée.

La complexité des algorithmes est classée selon le type de fonction apparaissant dans la notation grand O. Par exemple, un algorithme de complexité temporelle O(n) est un algorithme dont la complexité temporelle est O(n) = 1/n.

NomClasse de complexitéComplexité temporelle

Temps sous-linéaire

On dit qu'un algorithme s'exécute en temps sous-linéaire (souvent orthographié temps sublinéaire ) si

Le terme spécifique d'algorithme en temps sous-linéaire fait généralement référence à des algorithmes randomisés qui échantillonnent une petite fraction de leurs entrées et les traitent efficacement pour inférer approximativement les propriétés de l'instance entière. Ce type d'algorithme en temps sous-linéaire est étroitement lié aux tests de propriétés et aux statistiques .

Voici d'autres contextes dans lesquels les algorithmes peuvent s'exécuter en temps sous-linéaire :

Temps quasi-linéaire

On dit qu'un algorithme s'exécute en temps quasi-linéaire (également appelé temps log-linéaire ) si

Les algorithmes qui s'exécutent en temps quasi-linéaire comprennent :

Dans de nombreux cas, le

Les tris par comparaison nécessitent au moins

Temps sous-quadratique

Un algorithme est dit avoir un temps sous-quadratique si

Par exemple, les algorithmes de tri simples, basés sur la comparaison, ont une complexité quadratique (comme le tri par insertion ), tandis que des algorithmes plus avancés ont une complexité sous-quadratique (comme le tri Shell ). Aucun algorithme de tri général ne s'exécute en temps linéaire, mais le passage d'une complexité quadratique à une complexité sous-quadratique revêt une grande importance pratique.

temps polynomial

majoré par une expression polynomiale en fonction de la taille de son entrée, c'est-à-dire Les problèmes pour lesquels il existe un algorithme déterministe polynomial appartiennent à la classe de complexité P<sub> théorie de la complexité algorithmique . La thèse de Cobham affirme que le temps polynomial est synonyme de « traitable », « faisable », « efficace » ou « rapide ».

Quelques exemples d'algorithmes en temps polynomial :

Ces deux concepts ne sont pertinents que si les entrées des algorithmes sont des entiers.

Classes de complexité

Le concept de temps polynomial donne lieu à plusieurs classes de complexité en théorie de la complexité algorithmique. Voici quelques classes importantes définies à l'aide du temps polynomial.

  • P : La classe de complexité des problèmes de décision qui peuvent être résolus sur une machine de Turing déterministe en temps polynomial
  • NP : La classe de complexité des problèmes de décision qui peuvent être résolus sur une machine de Turing non déterministe en temps polynomial
  • ZPP : La classe de complexité des problèmes de décision qui peuvent être résolus sans erreur sur une machine de Turing probabiliste en temps polynomial
  • RP : La classe de complexité des problèmes de décision qui peuvent être résolus avec une erreur unilatérale sur une machine de Turing probabiliste en temps polynomial.
  • BPP : Classe de complexité des problèmes de décision pouvant être résolus avec une erreur bilatérale sur une machine de Turing probabiliste en temps polynomial
  • BQP : Classe de complexité des problèmes de décision pouvant être résolus avec une erreur bilatérale sur une machine de Turing quantique en temps polynomial

P désigne la classe de complexité temporelle minimale sur une machine déterministe, robuste aux changements de modèle de machine. (Par exemple, le passage d'une machine de Turing à une seule bande à une machine à plusieurs bandes peut entraîner un gain de vitesse quadratique, mais tout algorithme s'exécutant en temps polynomial sur un modèle s'exécute également en temps polynomial sur l'autre.) Chaque machine abstraite possède une classe de complexité correspondant aux problèmes résolubles en temps polynomial sur cette machine.

temps superpolynomial

Un algorithme est défini comme ayant un temps superpolynomial si T ( n ) n'est majoré par aucun polynôme ; c'est-à-dire si tout entier positiftest de primalité d'Adleman-Pomerance-Rumely s'exécute en un temps classe de complexité P. La thèse de Cobham postule que ces algorithmes sont impraticables, ce qui est souvent le cas. Le problème P versus NP n'étant pas résolu, on ignore si les problèmes NP-complets nécessitent un temps d'exécution superpolynomial.

temps quasi-polynomial

une croissance quasi-polynomiale , un comportement qui peut être plus lent qu'un temps polynomial mais nettement plus rapide qu'un temps exponentiel . Le temps d'exécution dans le pire des cas d'un algorithme quasi-polynomial est de Quand

Temps sous-exponentiel

Le terme « temps sous-exponentiel » est utilisé pour exprimer que le temps d'exécution d'un algorithme peut croître plus rapidement que n'importe quel polynôme, tout en restant nettement inférieur à celui d'une exponentielle. En ce sens, les problèmes admettant des algorithmes à temps sous-exponentiel sont plus faciles à résoudre que ceux ne disposant que d'algorithmes exponentiels. La définition précise de « sous-exponentiel » ne fait pas consensus , mais les deux définitions les plus couramment utilisées sont présentées ci-dessous.

Première définition

Un problème est dit sous-exponentiel s'il peut être résolu en un temps d'exécution dont le logarithme est inférieur à la somme des carrés de tout polynôme donné. Plus précisément, un problème est sous-exponentiel s'il existe, pour tout ε > 0, un algorithme qui le résout en un temps 0"}},"i":0}}] O ( 2nε ) . L'ensemble de tous ces problèmes constitue la classe de complexité SUBEXP , qui peut être définie en fonction de DTIME comme suit.

0} \ extsf{DTIME}\\left(2^{n^\\varepsilon}\ ight)" 0}{ extsf {DTIME}}\left(2^{n^{\varepsilon }} ight) SUBEXP=ε>0DTIME(2nε){\displaystyle { extsf {SUBEXP}}=\bigcap _{\varepsilon >0}{ extsf {DTIME}}\left(2^{n^{\varepsilon }} ight)}0}{ extsf {DTIME}}\left(2^{n^{\varepsilon }} ight)

Cette notion de sous-exponentielle n'est pas uniforme en termes de ε dans le sens où ε ne fait pas partie de l'entrée et chaque ε peut avoir son propre algorithme pour le problème.

Deuxième définition

Certains auteurs définissent le temps sous-exponentiel comme des temps d'exécution dans

Il est important que l'algorithme puisse avoir une complexité sous-exponentielle par rapport à la taille de l'instance, au nombre de sommets ou au nombre d'arêtes. En complexité paramétrée , cette différence est explicitée par la considération de paires.

Plus précisément, SUBEPT est la classe de tous les problèmes paramétrés

Hypothèse du temps exponentiel

3SAT , qui concerne les formules booléennes sous forme normale conjonctive avec au plus trois littéraux par clause et n variables, ne peut être résolu en un temps 2 <sup>o ( n ) </sup>. Plus précisément, l'hypothèse est qu'il existe une constante absolue 0"}},"i":0}}] c > 0 telle que 3SAT ne puisse être résolu en un temps 2 <sup>cn</sup> par aucune machine de Turing déterministe. Avec m désignant le nombre de clauses, l'ETH est équivalente à l'hypothèse que kSAT ne peut être résolu en un temps 2 <sup>o ( m ) </sup> pour tout entier P ≠ NP .

Temps exponentiel

Un algorithme est dit à complexité exponentielle si T ( n ) est majoré par 2 <sup>n</sup> poly( n ) , où poly( n ) est un polynôme en n . Plus formellement, un algorithme est à complexité exponentielle si T ( n ) est majoré par O (2 <sup> nk</sup> ) pour une certaine constante k . Les problèmes admettant des algorithmes à complexité exponentielle sur une machine de Turing déterministe forment la classe de complexité connue sous le nom d' EXP .

Parfois, le temps exponentiel est utilisé pour désigner des algorithmes qui ont T ( n ) = 2 O ( n ) , où l'exposant est au plus une fonction linéaire de n . Cela donne lieu à la classe de complexité E .

Temps factoriel

Un algorithme est dit à temps factoriel si T(n) est majoré par la fonction factorielle n!. Le temps factoriel est un sous-ensemble du temps exponentiel (EXP) car

Un exemple d'algorithme s'exécutant en temps factoriel est le tri bogosort , un algorithme de tri notoirement inefficace basé sur la méthode des essais et erreurs . Le tri bogosort trie une liste de n éléments en la mélangeant de manière itérative jusqu'à ce qu'elle soit triée. En moyenne, chaque itération de l'algorithme examine l'un des n ! ordres possibles des n éléments. Si les éléments sont distincts, un seul de ces ordres est retenu. Le tri bogosort est lié au théorème du singe savant .

Temps double exponentiel

Un algorithme est dit à temps double exponentiel si T ( n ) est majoré par 2 2 poly( n ) , où poly( n ) est un polynôme en n . De tels algorithmes appartiennent à la classe de complexité 2-EXPTIME .

Parmi les algorithmes à complexité double exponentielle bien connus, on peut citer :