Théorie de la complexité
Un article de Wikipédia, l'encyclopédie libre.
La théorie de la complexité s'intéresse à l'étude formelle de la difficulté des problèmes en
informatique. Elle se distingue de la théorie de la calculabilité qui s'attache à savoir si un
problème peut ou pas être résolu par un ordinateur. La théorie de la complexité se concentre
donc sur les problèmes qui peuvent effectivement être résolus, la question étant de savoir s'ils
peuvent être résolus efficacement ou pas en se basant sur une estimation (théorique) des
temps de calcul et des besoins en mémoire informatique.
Sommaire
[masquer]
1 Généralités
2 Problème NP-Complet
3 Polynomial contre non polynomial
4 Modèles de calcul
5 Liens
6 Références
Généralités
En théorie de la complexité, un problème est formalisé de la manière suivante : un ensemble
de données (ou instance) en entrée, et une question sur ces données (pouvant demander
éventuellement un calcul). La théorie de la complexité ne traite que des problèmes de décision
binaire, c'est-à-dire posant une question dont la réponse soit oui ou non. Cependant on étend
la notion de complexité aux problèmes d'optimisation. En effet il est facile de transformer un
problème d'optimisation en problème de décision. Si par exemple on cherche à optimiser une
valeur n on traite le problème de décision qui consiste à comparer n à un certain k. En traitant
plusieurs valeurs de k on peut déterminer une valeur optimale. On confondra souvent un
problème d'optimisation et son problème de décision associé.
La théorie de la complexité repose sur la définition de classes de complexité qui permettent de
classer les problèmes en fonction de la complexité des algorithmes qui existent pour les
résoudre. Parmi les classes les plus courantes, on distingue:
Classe L : un problème de décision qui peut être résolu
par un algorithme déterministe en espace logarithmique
par rapport à la taille de l'instance est dans L.
Classe NL : cette classe correspond à la précédente mais
pour un algorithme non-déterministe.
Classe P : un problème de décision est dans P s'il peut
être décidé par un algorithme déterministe en un temps
polynomial par rapport à la taille de l'instance. On
qualifie alors le problème de polynomial.
Classe NP : c'est la classe des problèmes de décision
pour lesquels la réponse oui peut être décidée par un
algorithme non-déterministe en un temps polynomial
par rapport à la taille de l'instance.
Classe Co-NP : nom parfois donné pour l'équivalent de
la classe NP avec la réponse non.
Classe PSPACE : les problèmes décidables par un
algorithme déterministe en espace polynomial par
rapport à la taille de son instance.
Classe NSPACE ou NPSPACE : les problèmes
décidables par un algorithme non-déterministe en
espace polynomial par rapport à la taille de son
instance.
Classe EXPTIME : les problèmes décidables par un
algorithme déterministe en temps exponentiel par
rapport à la taille de son instance.
On a les inclusions: P ? NP et Co-NP ? PSPACE = NPSPACE.
Problème NP-Complet
Soit C une classe de complexité (comme P, NP, etc.). On dit qu'un problème est C-complet si
il est dans C
il est C-dur (ou C-difficile)
Un problème est C-dur (ou C-difficile) si ce problème est plus dur que tous problèmes dans
C. Formellement on définit une notion de réduction : soient p et q deux problèmes, p se réduit
à q si p est une instance de q. Et donc p est C-dur (ou C-difficile) si pour tout problème q de
C, q se réduit à p.
Les problèmes complets les plus étudiés sont les problèmes NP-complets. Ceci parce que
beaucoup de problèmes intéressants sont NP-complets et que l'on ne sait pas résoudre un
problème NP-complet efficacement à cause du non déterminisme. La classe de complexité
étant par définition réservée à des problèmes de décisions, on parlera de problème NP-
difficile pour les problèmes d'optimisation sachant que pour ces problèmes d'optimisation on
peut construire facilement un problème qui lui est associé et est dans NP et qui est donc NP-
complet.
De manière intuitive, dire qu'un problème peut être décidé à l'aide d'un algorithme non-
déterministe polynomial signifie qu'il est facile, pour une solution donnée, de vérifier en un
temps polynomial si celle-ci répond au problème pour une instance donnée (à l'aide d'un
Certificat); mais que le nombre de solutions à tester pour résoudre le problème est exponentiel
par rapport à la taille de l'instance. Le non-déterminisme permet de masquer la taille
exponentielle des solutions à tester tout en permettant à l'algorithme de rester polynomial.
Problème NP-Complets célèbres
Problème SAT et variante 3SAT (mais 2SAT est
polynomial) ; notons qu'il existe des logiciels (dits SAT
solvers) spécialisés dans la résolution performante de
problèmes SAT ;
Problème du voyageur de commerce
Problème du cycle hamiltonien
Problème de la clique maximum
Problèmes de colorations de graphes
Problème d'ensemble dominant dans un graphe
Problème de couverture de sommets dans un graphe
Bien que moins étudiés, les problèmes complets pour les autres classes ne sont pas moins
intéressants
Le problème Reach (ou Accessibilité) qui consiste à
savoir s’il existe un chemin entre deux sommets d'un
graphe est NL-complet
Le problème Circuit Value (et monotone Circuit Value :
le même mais sans négation) sont des problèmes P-
complets
Le problème QBF (SAT avec des quantificateurs) est
PSPACE-complet
Remarque : tous les problèmes de la classe L sont L-complets vu que la notion de réduction
est trop vague. En effet la fonction qui doit transformer un instance d'un problème à l'autre
doit se calculer en espace logarithmique.
Polynomial contre non polynomial
On a trivialement car un algorithme déterministe est un algorithme non
déterministe particulier. En revanche la réciproque : , que l'on résume
généralement à P = NP du fait de la trivialité de l'autre inclusion, est l'un des problèmes
ouverts les plus fondamentaux et intéressants en informatique théorique. Cette question a été
posée en 1970 pour la première fois et celui qui arrivera à prouver que P et NP sont différents
ou égaux recevra le prix Clay (plus de 1.000.000 $)
Le problème de fond est que les algorithmes que l'on programme sont tous déterministes. Et
ceci pour la bonne et simple raison que l'on ne sait pas construire de machine non
déterministe. Ce qui fait que l'on ne peut que simuler un algorithme non déterministe par un
algorithme déterministe. Or il est démontré qu'un algorithme déterministe qui simule un
algorithme non-déterministe qui fonctionne en temps polynomial, fonctionne en temps
exponentiel. Ce qui fait que pour de grandes entrées on ne peut pas résoudre le problème en
pratique, quelle que soit la puissance de la machine. De plus cela apporte une confusion dans
le nom NP car on l'associe souvent à Non Polynomial alors que c'est bien Non déterministe
Polynomial.
Le problème P = NP revient à savoir si on peut faire cette simulation en restant polynomial.
En effet, s'il s'avérait que P = NP, alors on pourrait résoudre tous les problèmes NP en un
temps polynomial sur une machine déterministe; or les problèmes NP-Complets sont très
fréquents et pour aucun d'eux on n'a réussi à trouver un algorithme polynomial le résolvant.
Ce qui fait qu'on conjecture cependant que les problèmes NP-complets ne sont pas solubles en
un temps polynomial. À partir de là plusieurs approches sont tentées :
des algorithmes d'approximation permettent de trouver
des solutions approchées de l'optimum en un temps
raisonnable pour un certain nombre de programmes.
Dans le cas d'un problème d'optimisation on trouve
généralement une réponse correcte sauf que l'on en sait
pas si c'est la meilleure solution.
des algorithmes stochastiques : en utilisant des nombres
aléatoires on peut «forcer» l'algorithme à ne pas utiliser
les cas les moins favorables. C'est ainsi que récemment
un algorithme de test de primalité qui fonctionne en
temps polynomial a été découvert.
des heuristiques permettent d'obtenir des solutions
généralement bonnes mais non exacte en un temps de
calcul modéré;
des algorithmes par séparation et évaluation permettent
de trouver la ou les solutions exactes. Le temps de
calcul n'est bien sûr pas borné polynomialement mais,
pour certaines classes de problèmes, il peut rester
modéré pour des instances relativement grandes.
on peut restreindre la classe des problèmes d'entrée à une
sous-classe suffisante, mais plus facile à résoudre.
Si ces approches échouent, le problème est non soluble en pratique dans l'état actuel des
connaissances.
Pour le cas de L et NL on ne sait pas non plus si L = NL mais cette question est moins
primordiale car . Ce qui fait que les problèmes qui sont dans L et
dans NL sont solubles efficacement.
Inversement on sait que PSPACE = NPSPACE, mais par contre .
Donc avant de résoudre NP = PSPACE il faut résoudre P = NP.
Pour résumer on a , et de
plus on sait que NL est strictement inclus dans PSPACE et donc il y en a au moins deux entre
NL et PSPACE qui ne sont pas égaux.
Modèles de calcul
Ces théorèmes ont été établis grâce au modèle des machines de Turing. Mais d'autres modèles
sont utilisés en complexité dont :
les fonctions récursives dues à Kleene
les automates celullaires
les automates à pile
les machines à registres
les lambda-calculs
On sait que tous ces modèles sont équivalents. De plus grâce aux machines universelles de
Turing on sait que tout ce qui est calculable est modélisable dans ces systèmes. Les
conséquences sont importantes et nombreuses. La première fait que je suis derrière mon
clavier en ce moment : on peut construire des ordinateurs. Ceci fait un lien avec la théorie de
la calculabilité.
1 / 5 100%