Chapitre 9 (Np-Completude)
Chapitre 9 (Np-Completude)
Chapitre 9 (Np-Completude)
1
une classe de problèmes intéressante, appelée problèmes «NP-
complets»(NPC) dont le statut est inconnu. Aucun algorithme en temps
polynomial n’a encore été découvert pour un problème NPC, et personne n’a
été capable d’établir une borne inférieure superpolynomiale pour aucun
d’entre eux. La plupart des théoriciens de l’informatique pensent que les
problèmes NPC sont intraitables. En effet, si l’un des problèmes NPC
pouvait être résolu en temps polynomial, alors tous les problèmes NPC (et
même ceux de NP) auraient un algorithme permettant de les résoudre en
temps polynomial (vous verrons pourquoi).
Notre but n’est pas de prouver l’ensemble des résultats que nous
présenterons mais plutôt de donner à l’étudiant une idée générale de la NP-
complétude de même que ses répercussions dans la conception
d’algorithmes (plusieurs preuves seront demandées en exercices).
2
PROBLÈMES ABSTRAITS
Exemple :
Cette formulation d’un problème abstrait est trop générale pour notre propos.
Pour des raisons de simplicité, la théorie de la NP-complétude est restreinte
aux problèmes de décisions : la solution est oui/non.
3
Exemple :
4
CODAGE
Exemple :
e(17) = 10001
Classe de complexité P
5
Exemple :
On suppose qu’un entier k doit être fourni comme entrée unique d’un
algorithme, et que le temps d’exécution de l’algorithme est θ (k ) . Si l’entier k
est fourni en unaire (une chaîne de k 1) le temps d’exécution est en O(n) sur
des entrées de longueur n, c’est-à-dire polynomial. En revanche, si l’on
utilise la représentation binaire plus naturelle de l’entier k, la longueur de
l’entrée est n = lg k + 1 . Dans ce cas, le temps d’exécution de l’algorithme
est θ (k ) = θ (2 n ) , qui est exponentiel par rapport à la taille de l’entrée. Donc,
selon le codage choisi, l’algorithme peut s’exécuter en temps polynomial ou
superpolynomial.
Le codage d’un problème abstrait est donc très important pour une bonne
compréhension du temps polynomial. On ne peut pas vraiment parler de
résolution d’un problème abstrait sans commencer par spécifier le codage.
Néanmoins, si l’on met de côté les codages «coûteux» comme les codages
unaires, le codage d’un problème intervient peu sur la question de savoir si
la résolution peut s’effectuer en temps polynomial.
Définitions :
Théorème :
6
UN CADRE POUR LES LANGAGES FORMELS
L’un des intérêts pratiques de s’en tenir aux problèmes de décision est qu’ils
rendent facile à utiliser les mécanismes de la théorie des langages formels
(voir le cours informatique théorique). Il n’est pas inutile de revoir quelques
définitions ce cette théorie.
Définitions :
- Un alphabet Σ est un ensemble fini de symboles.
- Un langage L sur Σ est un ensemble quelconque de chaînes
construites à partir de Σ.
- La chaîne vide est notée ε (parfois λ).
- Le langage vide est noté ∅.
- Le langage de toutes les chaînes sur Σ est noté Σ*.
- Opérations sur les langages : union, intersection, complément,
fermeture, concaténation etc.
Note : la longueur d’une chaîne est toujours finie
On dit qu’un algorithme A accepte une chaîne x∈{0,1}* si, étant donnée une
entrée x, l’algorithme sort A(x)=1. Le langage accepté par un algorithme A
est alors L = {x ∈ {0,1}* : A( x) = 1}. Un algorithme A rejette une chaîne x si
A(x)=0.
7
Un langage L est décidé par un algorithme A si toute chaîne binaire de L est
acceptée par A et si toute chaîne binaire n’appartenant pas à L est rejetée par
A.
Important
Pour accepter un langage, un algorithme n’a besoin de s’intéresser qu’aux
chaînes de L, alors que pour décider un langage, il doit correctement
accepter ou rejeter toutes les chaînes de {0,1}*.
Théorème :
P = { L : L est accepté par un algorithme polynomial }
8
VALIDATION EN TEMPS POLYNOMIAL
Exemple :
Soit i = <G, u, v, k > une instance du problème de décision CHEMIN. On se
donne aussi un chemin p de u vers v. On peut facilement vérifier que la
longueur de p est au plus égale à k, et si oui, on peut voir p comme un
«certificat» de l’appartenance effective de i à CHEMIN.
Définition :
Un algorithme de validation A est un algorithme à deux arguments, où un
argument est une chaîne d’entrée ordinaire x et l’autre une chaîne binaire y
appelée certificat. Un algorithme A à deux arguments valide une chaîne
d’entrée x s’il existe un certificat y tel que A(x,y)=1. Le langage validé par
un algorithme de validation A est :
L = { x ∈ {0,1}* : il existe y ∈{0,1}* tel que A(x, y) = 1 }.
L={ x ∈{0,1}* : il existe un certificat y avec |y|=O(|x|c) tel que A(x, y)=1 }.
9
Ainsi, si L ∈ P, alors L ∈ NP, puisque s’il existe un algorithme polynomial
décidant L, ce même algorithme peut être facilement converti en un
algorithme de validation à deux arguments qui se contente d’ignorer le
certificat et accepte exactement les chaînes d’entrée dont il détermine
qu’elles appartiennent à L. Donc,
P ⊆ NP
P = NP ?
On ne le sait pas !. La plupart des chercheurs pensent que
non.
10
NP-COMPLÉTUDE ET RÉDUCTIBILITÉ
Définition :
x ∈ L1 ⇔ f(x) ∈ L2.
Théorème:
11
NP-complétude
Définition :
Un langage L ⊆ {0,1}* est NP-complet si
(*) L ∈ NP, et
(**) L* ≤p L pour tout L* ∈ NP.
Théorème :
Si un problème NP-complet est résoluble en temps polynomial, alors P=NP.
De façon équivalente, si un problème quelconque de NP n’est pas résoluble
en temps polynomial, alors aucun problème de NP-complet ne peut se
résoudre en temps polynomial.
12
Théorème :
Si L est un langage tel que L* ≤p L pour un certain L* ∈ NPC, alors L est
NP-difficile. De plus, si L ∈ NP, alors L ∈ NPC.
Circuit SAT
SAT
3 FNC SAT
VERTEX C. TSP
SSET SUM
13
De nombreux problèmes d’intérêt pratique sont NP-complets,
mais trop importants pour qu’on les laisse tomber, simplement
parce qu’une solution optimale est intraitable. Si un problème
est NP-complet, il y a peu de chances de trouver un algorithme
polynomial capable de le résoudre exactement mais cela
n’implique pas que tout espoir soit perdu. Il existe deux
approche pour contourner la NP-complétude. D’abord, si les
entrées réelles son petites, un algorithme exponentiel peut
parfaitement convenir. Ensuite, il est encore possible de
trouver des solutions presque optimales en temps polynomial.
En pratique on peut souvent se contenter d’une quasi-
optimalité. Un algorithme qui retourne des solutions presque
optimales est appelé algorithme d’approximation. L’étude de
tels algorithmes est cruciale et ferait l’objet du cours «analyse
d’algorithmes II». Nous désirons cependant terminer ce cours
en présentant un tel algorithme pour un problème bien connu
soit le problème du sac à dos sans fractionnement.
14
Un algorithme d’approximation pour le problème du sac à dos (13.2.2).
Fonction approx-knap(w[1..n],v[1..n],W)
biggest = max(v[i])
return max(biggest,greedy-knap(w,v,W))
15
QUELQUES DÉFINITIONS DE PROBLÈMES NP-COMPLETS
16