Vous êtes sur la page 1sur 22

Notions de complexité en temps

des problèmes
Globalement il y a 3 grands types de problèmes selon leurs complexités :
1. les problèmes de « complexité raisonnable ». Ces problèmes sont résolvables par
des algorithmes déterministes de complexité polynomiale ou moins. Ils
appartiennent à la classe P.
2. les problèmes de « complexité non raisonnable ». Ces problèmes ne peuvent être
résolus que par des algorithmes de complexité « non raisonnable »
(exponentielles). Ils appartiennent à la classe NP-Dur (ou NP-difficile).
Généralement on ne cherche pas à résoudre ce type de problèmes.
3. les problèmes de « complexité semi-raisonnable ». Ces problèmes ont la
particularité d’être résolus par des algorithmes de complexité polynomiale
seulement si on utilise des algorithmes Non Déterministes. Mais on ne sait pas
les résoudre par des algorithmes déterministes polynomiaux. Ils forment la classe
NP-C (Non déterministes Polynomiaux – Complets). Ce sont des problèmes très
importants à résoudre en informatique. On utilise pour cela des stratégies
algorithmiques avancées pour contrôler l’explosion de leurs complexités.
L’objectif de cette partie du cours est de classé les problèmes dans des classes
d’équivalences selon leur complexité (c-à-d selon la complexité des algorithmes qui les
résolvent).
Plus particulèrement, on va s’intéresser aux problèmes NP-C et comment on peut
démontrer qu’un problème est NP-C.

Pour formaliser ces différentes notions, on va utiliser :


• les Machines de Turing pour définir une métrique pour la complexité ,
• les transformations polynomiales pour définir les classes d’équivalences (la classe NP-C).
Complexité des machines de Turing

Soit M une MT déterministe qui s’arrête toujours

Le temps de calcul de M sur un mot u , noté TCM(u), est la longueur d’exécution de M sur u.
C-à-d le nombre de transitions nécessaires à M pour décider (ou accepter) le mot u
( à partir de l’état initial q0 jusqu’à l’arrêt sur un état final qf)

Si M est une MT non-déterministe, TCM(u) est la longueur de la plus courte exécution de M


qui accepte u.

Si le mot u n’est pas accepté, on prend TCM(u)=1. Ceci permet de ne pas tenir compte dans
le calcul de la complexité des mots qui n’appartiennent pas au langage.
Complexité des machines de Turing
Définition
Soit M une MT qui s’arrête toujours. La complexité en temps de M est la fonction TM(n)
TM (n) = max{k, u  Ʃ* tq |u|=n et k = TCM(u)}

La fonction TM donne le nombre maximum de transitions nécessaires pour décider (ou


accepter) un mot de taille n. Il s’agit d’une complexité dans le pire des cas.

Cette définition est valable pour le cas des MT déterministes et des MT non déterministes.

Définition
Une machine de Turing M est dite polynomiale si sa complexité en temps TM(n) est de
l’ordre d’un polynôme.
Complexité des machines de Turing

Théorème
Soit M une MT Non déterministe polynomiale, alors il existe M’ une MT déterministe et un
polynôme Q(n) tels que :
M’ est équivalente à M (décide le même langage)
TM’(n)=O(2Q(n)) (complexité exponentielle)

Donc le fait de prendre une MT non déterministe polynomiale et de la transformer en une


MT déterministe, cette dernière devient de complexité exponentielle.
Ceci ne veut pas dire qu’on ne peut pas écrire directement une machine déterministe
polynomiale qui soit équivalente. Mais ce n’est pas toujours le cas.
Les langages P et NP

A ce stade on peut définir deux ensembles de langages

Les langages polynomiaux, ceux qui sont décidés par une MT déterministe polynomiale.
On note par P l’ensemble des langages polynomiaux.

Les langages non déterministes polynomiaux, ceux qui sont acceptés par une MT
déterministe mais non polynomiale. On note par NP l’ensemble des langages Non
déterministes Polynomiaux.

On a bien P ⊆ NP
Liens entre langages et problèmes
• On va définir les différentes notions de complexité en temps sur des problèmes décision (c-à-d les
problèmes dont le réponse est soit « oui » soit « non »). Mais tous les résultats restent valables
dans le cas des problèmes de calcul.
• On appelle instances d’un problème Q , les valeurs réels qu’on donne aux différentes données en
entrée du problème Q. Les instances positives , sont les instances pour lesquelles le problème Q
donne « oui » en sortie. Et les instances négatives , sont les instances pour lesquelles on a une
réponse « non ».
• Tout problème Q est encodé (ou décrit) par un langage formel L.
• Toutes les instances positives d’un problème Q sont donc les mots du langage L qui l’encode. Et
toute les instances pour lesquelles l’algorithme qui résout le problème P donne « oui » sont donc
des mots décidés par la machine de Turing qui accepte le langage L. Et vis vers ça.
• Donc on peut parler indifféremment de problèmes ou de langages. Comme on peut parler
indifféremment d’algorithmes ou de MT.
Les langages P et NP
Donc on peut parler indifféremment de problèmes ou de langages. Comme on peut parler
indifféremment d’algorithmes ou de MT.
Un problème est polynomial s’il est résolvable par un algorithme déterministe polynomial.
On note par P l’ensemble des problèmes polynomiaux.

Un problème est non déterministe polynomial, s’il est résolvable par algorithme non
déterministe polynomial. On note par NP l’ensemble des problèmes Non déterministes
Polynomiaux.

Remarque : on utilise la notion d’algorithme non déterministe juste d’un point de vu


théorique. Car on prtique un algorithme est toujours déterministe.
Transformation polynomiale

• Pour montrer qu’un problème n'est pas dans P, on utilise la technique des
transformations polynomiales.

• Définition : Transformation polynomiale


Soient L1  Ʃ1* et L2  Ʃ2* deux langages.
Une transformation polynomiale de L1 vers L2 ; notée L1 α L2 ;
est une fonction f : Ʃ1*  Ʃ2* qui satisfait les 2 conditions suivantes :
1. f est calculable en un temps polynomial
2. f(x)  L2 ssi x  L1
Transformation polynomiale
L1 L2
L1 α L2

x. f
f(L)
. f(x)
Transformation polynomiale
Instances positives de problème P1 Instances positives de problème P2
P1 α P2

x. f f(P1)
. f(x)

On peut dire que le problème P1 est « plus facile » que le problème P2


Propriétés des transformations polynomiales

Lemme 1
Si L1 α L2 alors
1. Si L2  P alors L1  P
2. Si L1  P alors L2  P

Lemme 2 Transitivité de la transformation polynomiale

Si L1 α L2 et L2 α L3 alors L1 α L3
Exemple de transformation polynomiale

Problème du voyageur de commerce TS


V : ensembles de n villes
d(vi,vj) : distance entre villes vi et vj
Pb : déterminer s’il existe un parcourt fermé des villes (revenant à son point de départ)
dont la distance est ≤ b (constante)

Problème du circuit Hamiltonien HC


Un graphe G = (S,E) S : ensembles des sommets
E : ensembles des arcs
Pb : déterminer s’il existe un parcourt fermé du graphe contenant chaque sommet du graphe
une et une seule fois.
Exemple de transformation polynomiale
Problème du voyageur de commerce TS
• Il y a n! parcours fermés de villes possibles
• Si on résout le problème d’une façon non déterministe (on fait du premier coup le bon choix du parcourt), alors
la complexité de l’algorithme serait polynomiale. Car calculer le coût du parcours et tester que c’est ≤ b est de
complexité O(n). Donc TS  NP.
• Si on résout le problème d’une façon déterministe. On est obligé de faire une boucle qui parcourt au pire des
cas les n! combinaisons. Et chaque itération a un coût O(n). D’où une complexité exponentielle.
• Mais jusqu’à aujourd’hui on n’a pas trouvé un algorithme déterministe polynomial qui résout le problème TS.

Problème du circuit Hamiltonien HC


• Il y a n! Permutation possible des sommets du graphe.
• Si on résout le problème d’une façon non déterministe (on fait du premier coup le bon choix de la permutation
des sommet), alors la complexité de l’algorithme serait polynomiale. Car vérifier que les différents sommets
d’une permutation sont connecter par un arc est de complexité O(n). Donc HC  NP.
• Si on résout le problème d’une façon déterministe. On est obligé de faire une boucle qui parcourt au pire des
cas les n! permutations. Et chaque itération a un coût O(n). D’où une complexité exponentielle.
• Mais jusqu’à aujourd’hui on ne sait pas résoudre le problème HC par un algorithme déterministe polynomial.
HC α TS

Problème HC Problème TS
- Ensembles des villes V = S
G = (S,E) f
- Distances entre les villes
d(vi,vj) = 1 si (vi,vj)  E
=2 sinon
- Le constante b = nombre de sommets

On a :
1. La transformation f est calculable en un temps polynomial
2. x  HC ssi f(x)  TS

Donc HC α TS
Interprétation de HC α TS

Le fait d’avoir HC α TS, on peut dire que :

1. Si le problème TS est polynomial (TS  P ) alors forcément HC est polynomial ( HC  P )


2. Si le problème HC n’est pas polynomial ( HC  P) alors forcément le problème TS n’est
pas polynomial ( TS  P)
3. Si le problème HC est polynomial ( HC  P ) alors on ne peut rien dire sur le problème TS
(car HC est « plus difficile » de TS)

D’autre part on sait que HC et TS apprtiennent tous les deux à NP.


Équivalence polynomiale
Définition
Deux problèmes L1 et L2 sont «polynomialements équivalents» ; qu’on note L1 p L2 ;
ssi L1 α L2 et L2 α L1

L1 L1 p L2 L2

g
f
Équivalence polynomiale

L’équivalence polynomiale est une relation d’équivalence (réflexive, transitive et


symétrique).
Cette relation nous permet de regrouper les problèmes en des classes d’équivalences du
point de vue complexité.
Les membres d’une même classe sont tous mutuellement polynomialements équivalents.
C-à-d tous les membres d’une même classe ont soit tous une solution polynomiale, soit
aucun n’a de solution polynomiale.
Équivalence polynomiale

Nous avons montré que HC α TS. On peut aussi montrer que TS α HC (mais c’est plus compliqué).

Donc HC p TS

On peut déduire alors que les problèmes HC et TS sont « équivalents » du point de vue complexité.
Si l’un deux est polynomial alors l’autre l’est forcément. Et s’il n’existe pas d’algorithme polynomial
pour résoudre l’un , alors il n’ y a pas d’algorithme polynomial pour résoudre l’autre.
HC  P ssi TS  P et HC  P ssi TS  P

HC et TS sont donc dans la même classe d’équivalence polynomiale {TS, HC, …} et appartiennent
tous les deux à NP.
Équivalence polynomiale

Remarque
Grâce à la transitivité de l’équivalence polynomiale, pour montrer qu’un problème L
appartient à une classe qu’équivalence polynomiale C, il suffit de trouver deux
membres L1 et L2 de cette classe tels que L α L1 et L2 α L

Donc pour monter qu’un troisième problème X est dans la même classe {TS, HC}, on
peut faire par exemple X α HC et TS α X .
On aura donc TS, HC et X dans la même classe {TS, HC, X}.
Comme ça on peut petit à petit agrandir cette classe {TS, HC, X1, X2, X3 …}
Équivalence polynomiale

On peut aussi définir un ordre partiel, du point de vue complexité, sur les
différentes classes d’équivalences polynomiales.

Définition
Une classe d’équivalence polynomiales C1 est « inférieure » à une classe
d’équivalence C2 ; on note C1 ≼ C2 ; s’il existe une transformation polynomiale de
tout problème de C1 vers tout problème de C2.

Intuitivement, C1 ≼ C2 signifie que les problèmes de la classe C1 sont « plus faciles »


ou « moins difficiles » que les problèmes de la classe C2.

Vous aimerez peut-être aussi