Chapitre 3 La NP-complétude et le théorème de Cook-Levin

Slides:



Advertisements
Présentations similaires
La recherche de chemin optimal
Advertisements

Dans cette partie Graphes Eulériens.
Algorithmes et structures de données avancées Cours 7
Algorithmes et structures de données avancés
Portée des variables VBA & Excel
Classification et prédiction
Fonctions & procédures
Calculs de complexité d'algorithmes
GEF 435 Principes des systèmes d’exploitation
Cours d’Algorithmique
Cours d'algorithmique 11 / Intranet 1 9 janvier 2006 Cours dAlgorithmique N P - complétude.
Calcul propositionnel
Système formel Nous avons introduit : signes de variables (x, y, z, …), de constantes (0, 1), d’opérations (+, ), de relations (=, ) Axiomes : ce sont.
Chap 1 Grammaires et dérivations.
Automate asynchrone.
variable aléatoire Discrète
Apprendre à se servir d’un tableur
Utilisation des tableaux
Conception et analyse des algorithmes
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Structures de données linéaires
Plus courts chemins On présente dans ce chapitre un problème typique de cheminement dans les graphes : la recherche d'un plus court chemin entre deux sommets.
Algorithmique et Programmation
Preuves interactives: IP, AM, MA et isomorphisme de graphe
Algorithmes Branch & Bound
Heuristiques A. Introduction B. Recherche d ’une branche
Chapitre 2 Réductions: exemples et méthodes
Optimisation linéaire
Programmation logique Démonstrateur automatique
Algorithmique et Programmation
Gestion de Fichiers Arbres B.
Espaces vectoriels Montage préparé par : S André Ross
Les structure d’un programme :
IFT Chapitre 3 La NP-complétude et le théorème de Cook-Levin.
Algorithme de Bellman-Ford
Chapitre 2 Réductions: exemples et méthodes
Coloration gap sommet identifiante de graphes
Contourner la NP-complétude
IFT Complexité et NP-complétude
IFT Chapitre 1 Classes de complexité fondamentales:
IFT Au delà de NP: hiérarchie polynomiale, EXP, NEXP.
Programmation linéaire en nombres entiers Algorithme de la subdivision successive («Branch and Bound Algorithm»)
Complexité d’espace L, NL, PSPACE P-complétude et NC
IFT Théorème PCP: Aperçu et applications à linapproximabilité.
Algèbre Relationnelle
CSI3525: Concepts des Languages de Programmation
Eléments de théorie anthropologique
Algorithmes d ’approximation
Conception et analyse des algorithmes Les algorithmes probabilistes
Algorithmes probabilistes
Atelier de formation : MAT optimisation II (les graphes).
Indécidabilité.
8INF8061 Conception et analyse des algorithmes Comment comparer deux problèmes?
Programmation linéaire en nombres entiers : les méthodes de troncature
IFT Complexité et NP-complétude Chapitre 0 Rappels.
Conception et analyse des algorithmes
Contourner la NP-complétude
1 Notations Asymptotiques Et Complexité Notations asymptotiques : 0 et  Complexité des algorithmes Exemples de calcul de complexité.
Graphes 1. Introduction 2. Définition 3. Représentation mémoire
D.E ZEGOUR Ecole Supérieure d’Informatique
Programmation linéaire en nombres entiers
STATISTIQUES – PROBABILITÉS
D.E ZEGOUR Ecole Supérieure d’Informatique. Problèmes de décision Concepts de base Expressions régulières Notation particulière pour exprimer certaines.
Problème de double digestion
8PRO107 Éléments de programmation Les adresses et les pointeurs.
La pile de crêpes.
Chapitre 4 La représentation des nombres.
Algorithmique Boucles et Itérations
Chap. 3 Récursion et induction. Les définitions par récurrence consistent à construire des objets finis, à partir d'autres, selon certaines règles. Les.
Cycle, Cocycle, Arbre et Arborescence
Transcription de la présentation:

Chapitre 3 La NP-complétude et le théorème de Cook-Levin IFT-66975 Chapitre 3 La NP-complétude et le théorème de Cook-Levin

Définitions Soit A un problème de décision et C une classe de problèmes de décision. A est C-ardu (ou C-difficile) sous transformations polynomiales si pour tout C  C, on a C p A. A est C-facile sous transformations polynomiales s’il existe C  C A p C. A est C-équivalent sous transformations polynomiales s’il est C-ardu et C-facile. A est C-complet sous transformations polynomiales si A est C-ardu et A  C. NOTE: On peut également définir ces notions en utilisant des réductions différentes (e.g. les réductions de Turing ou réductions logspace.)

Pourquoi ces notions sont-elles utiles? Si A est C-ardu et qu’un des problèmes de C n’admet pas d’algorithme efficace, alors A n’en admet pas non plus. Si A est C-facile et que tous les problèmes de C ont des algorithmes efficaces, alors A en admet un aussi. Si A est C-équivalent alors sa complexité représente celle de tous les problèmes de C. Si A est C-complet, alors sa complexité représente la complexité maximale des problèmes dans C. Dernier détail: existe-t-il des problèmes ardus ou complets pour P, NP, RP, BPP, etc. ?

Soit AccNP le problème suivant: Instance: M,x,p où M est une machine de Turing non-déterministe, x est une entrée pour M et p est un polynôme. Question: Est-ce que M accepte l’entrée x en au plus p(|x|) étapes? Théorème: Le problème AccNP est NP-complet

w  K  NK accepte w en temps qK(|w|)  Nk,w,qk  AccNP Démonstration: AccNP  NP: un algorithme non-déterministe peut simuler M sur l’entrée x pendant p(|x|) étapes en choisissant non-déterministement les bits non-déterministes de M. Cet algorithme accepte si et seulement s’il existe un choix non-déterministe tel que M accepte x en au plus p(|x|) étapes donc ssi M,x,p  AccNP. Pour tout langage K  NP on a K p AccNP. Puisque K  NP il existe une machine de Turing non-déterministe NK telle que L(NK) = K et dont le temps de calcul est borné par un polynôme q. Soit fK la transformation polynomiale fK(w) = Nk,w,qk. Cette transformation est calculable en temps polynomial car NK et qK sont toujours les mêmes! w  K  NK accepte w en temps qK(|w|)  Nk,w,qk  AccNP Donc K p AccNP et AccNP est NP-complet.

Théorème de Cook-Levin SAT est NP-complet. On a déjà vu que SAT  NP. Mais le théorème montre que SAT est le plus dur de sa classe.

Démonstration (Cook-Levin) Soit M une machine de Turing non-déterministe dont le temps de calcul est nk et L = L(M) le langage reconnu par cette machine. Il faut montrer que L p SAT. Donc, trouver une fonction f calculable en temps polynomial et telle que x  L  f(x)  SAT. En d’autres mots, f associe à x une formule Booléenne satisfiable ssi M accepte x!

Nous allons suivre le calcul de M sur x en considérant les configurations successives de M. Une configuration représente l’état de la machine M à un moment précis. Déterminé par L’état du ruban. L’état du contrôle fini. La position de la tête de lecture. Le bit non-déterministe courant b. Peut être représenté par un ruban d’une longueur correspondant au temps de M + 2. Les cases contiennent le contenu du ruban de M. De plus, une case contient l’état du contrôle fini de M, et est placé devant la case correspondans à la position de la tête de lecture. La dernière case du ruban contient le bit non-déterministe. a1 a2 a3 ... q ai ai+1 al b

 Tableau du calcul de M Bits non-déterministes nk config initiale B ... b1 b2 b3  bnk # q0 x1 x2 ... xn # # 2ème config # # # nk # # config finale

Un tableau est dit valide si la configuration i+1 est bien celle obtenue à partir de la configuration j en effectuant la transition bi. Notez que pour chaque choix de configuration initiale et chaque choix des bi, il existe un tableau unique représentant l’exécution de M avec ces bits. Un tableau est dit acceptant pour x s’il est valide, si la configuration initiale est celle de x et si un des états q du tableau est un état final acceptant. Note: Comme le calcul est non-déterministe, il existe plus d’un tableau possible pour chaque entrée x. M accepte x si et seulement s’il existe un tableau acceptant pour x. On veut construire pour chaque x une formule x qui est satisfiable ssi il existe un tableau acceptant pour x.

Construction de  Le tableau est formé de (nk)2 cellules cell[i,j] qui contiennent chacune soit un symbole de , soit un état de Q. Pour chaque s    Q, on crée une variable ci,j,s avec l’intention suivante: ci,j,s = 1 ssi cell[i,j] contient s. On crée les variables b1, ... ,bnk représentant les bits aléatoires. Finalement, on construit  = cell  init  étape  accepte comme la conjonction de 4 formules construites séparément.

Construction de cell On veut que les variables ci,j,s représentent le contenu des différentes cellules du tableau. Pour rendre cela possible, cell s’assure que Pour chaque i,j, au moins une variable ci,j,s est vraie. Pour chaque i,j au plus une variable ci,j,s est vraie.

Construction de init. On s’intéresse au tableaux dont la configuration intiale est celle de x. C’est ce que garantit init. init = c1,1,#  c1,2,q0  c1,3,x1  c1,4,x2 ...  c1,n+2, xn  c1,n+3,b  ...  c1,nk-1,b  c1,nk,# Important: Contrairement à cell, cette formule est différente pour deux entrées x différentes.

Construction de accepte accepte assure qu’un état acceptant existe dans le tableau.

a c d Construction de étape. étape s’assure que la (i+1)ème configuration est bien celle atteinte à partir de la ième lorsque le bit aléatoire est bi . On considère pour ça chaque bloc 2  3 du tableau avec l’intention suivante: si tous les blocs de cette taille sont localement valides alors le tableau au complet est valide. Exemples a c d Bloc légal

a q1 c bi q2 a q1 c bi q2 d Bloc légal si la transition de M en lisant c dans l’état q1 avec le bit aléatoire bi écrit un a et passe à l’état q2 et déplace la tête de lecture à droite. a q1 c bi q2 d Bloc légal si la transition de M en lisant c dans l’état q1 avec le bit aléatoire bi écrit un a et passe à l’état q2 et déplace la tête de lecture à gauche.

a d c bi Bloc légal si la transition de M a réécrit le a en d. a d c bi q2 Bloc légal si la transition de M déplacé la tête de lecture à gauche.

a d c b a q1 c b q2 Exemples de bloc illégaux Impossible, un seul caractère peut changer par étape. a q1 c b q2 Impossible, seul le caractère à droite de q1 peut avoir changé.

a b c Impossible car b ne peut être changé si la tête de lecture n’est pas sur cette position. q1 b c a q2 Impossible car la tête de lecture se déplace d’une case au plus à chaque étape.

a1 a2 a3 a4 a5 a6 Définition formelle: Un bloc est légal pour bi = 0 si Le bloc contient au plus un symbole d’état par ligne. Si le bloc ne contient pas de symbole d’état alors a2 = a5, a3 = a6 et soit a1 = a4 soit il existe un état q telle que la transition 0 (q’,a1) réécrit le symbole a1 par a4 et ne déplace pas la tête de lecture ou la déplace vers la gauche. Si a1 = q alors si la transition (q,a1) ne déplace pas la tête à gauche, la seconde ligne est celle résultant de la transition. Si (q,a1) déplace la tête à gauche, a2 = a5 et a3 = a6. Idem si a2 = q. Si a3 = q alors il existe un symbole a’ qui fait en sorte que (q,a’) donne la ligne a4, a5, a6. Si le seul symbole d’état est a4 = q alors il existe un état q’ tel que 0(q’,a1) déplace la tête à droite et a2 = a5 et a3 = a6. Si le seul symbole d’état est a6 = q alors il existe une paire (q,a) telle que 0(q,a) déplace la tête à gauche. On n’a pas comme seul symbole d’état a5 = q.

Donc le bloc est légal pour bi = 1 ssi Le nombre total de blocs 2  3 possibles est (|| + |Q|)6, un nombre fini indépendant de n. Soit a1, ..., a6 les 6 symboles composant un bloc. Le bloc commençant en (i,j) contient ces 6 symboles ssi ci,j,a1  ci,j+1,a2  ci,j+2,a3  ci+1,j,a4  ci+1,j+1,a5  ci+1,j+2,a6 Donc le bloc est légal pour bi = 1 ssi ci,j,a1  ci,j+1,a2  ci,j+2,a3  ci+1,j,a4  ci+1,j+1,a5  ci+1,j+2,a6  bi Il n’y a que deux types de blocs légaux. Ceux qui sont légaux pour bi =1 et ceux légaux pour bi = 0. ci,j,a1  ci,j+1,a2  ci,j+2,a3  ci+1,j,a4  ci+1,j+1,a5  ci+1,j+2,a6  ̅bi

[Le bloc (i,j) est légal] À montrer: Si la première rangée du tableau est la configuration initiale sur x et si tous les blocs sont légaux alors chaque rangée du tableau est la configuration résultant de la précédente lorsque le bit aléatoire est bi.

Nous avons maintenant une fonction f qui associe à x la formule Nous avons maintenant une fonction f qui associe à x la formule  = cell  init  étape  accepte. Cette fonction est calculable en temps polynomial! || = O(n2k) + O(nk) + O(n2k) + O(n2k) Si x  L alors M accepte x. Soient b1, ..., bnk les bits aléatoires qui amènent M à acepter x. Par notre construction, on peut mettre en correspondance les valeurs des variables ci,j,s avec le contenu du tableau correspondant à ce choix des bi avec la garantie que cell, init et étape sont satisfaites. De plus, comme M accepte x, il existe un état acceptant dans le tableau donc accepte est aussi satisfaite. Donc   SAT. Si   SAT, alors il existe des valeurs des ci,j,s et bi qui satisfont . Par construction, ces valeurs correspondent à un tableau du calcul sur x avec les bits aléatoires bi. Puisque accepte est satisfaite, ce tableau est acceptant pour x donc x  L.

Observations utiles Théorème: S’il existe un problème A  P avec A NP-complet alors P = NP. Démonstration: On a P  NP. Pour montrer NP  P, prenons un B  NP. On a B p A car A est NP-complet. Il existe f calculable en temps polynomial avec x  B  f(x)  A. On peut donc tester si x  B en calculant f(x) puis en utilisant un algorithme de temps polynomial pour A. Donc B  P.

Observations utiles Théorème: Si A  NP et s’il existe un B NP-complet tel que B p A alors A est NP-complet. Démonstration: On sait que A  NP, il reste à montrer que pour tout C  NP on a C p A. On sait que C p B et B p A donc C p A.

TSP TSP2, , sym DHC p HC CLQ p IS p VC SAT p 3-SAT NP-complet!

Démontrer qu’un problème est NP-complet Pour démontrer que A est NP-complet il faut Démontrer que A est dans NP. Choisir judicieusement un problème NP-complet B et montrer que B p A.

Problèmes complets pour d’autres classes? Soit L un langage de P tel qu’il existe au moins un x1  L et un x0  L. Alors L est P-complet sous les transformations polynomiales! Pour une notion intéressante de P-complétude on utilisera des transformations plus restrictives.

Problèmes complets pour d’autres classes? On croit généralement que les classes RP, ZPP, BPP n’ont pas de problème complet.

Qu’indique la NP-difficulté? Si A est NP-ardu alors Il n’y a pas d’algorithme connu pour A dont le temps de calcul est o(cn) pour tout c > 1. La majorité de la communauté mathématique pense que A n’admet aucun algorithme de temps polynomial.

(Trois mauvaises raisons...) P = NP? Pourquoi croit on que P  NP? Parce que si c’était le cas, on aurait trouvé un algorithme de temps polynomial pour un problème NP-complet. Parce qu’intuitivement, trouver une solution est significativement plus dur que d’en vérifier la validité. Parce qu’on veut y croire... (Trois mauvaises raisons...)

Quels problèmes sont NP-complets? En pratique, les variantes de décision des problèmes d’optimisation combinatoire sont soit dans P soit NP-complets. Liste sans fin (et grandissante): problèmes de satisfiabilité problèmes de commis-voyageur problèmes de sac à dos problèmes de (ré-)partition et de planification problèmes de clique et de coloriage. problèmes de formation d’équipe

Liste de Garey & Johnson: Théorie des graphes (65 problèmes) 3-COL, domination, cycle Hamiltonien, etc. Conception de réseau (51) TSP, Max-cut, plus long chemin, etc. Ensembles et partitions (21) Formation d’équipes, partition Logique (19), Planification (22), archivage (36), programmation mathématique (13), algèbre (18), jeux et puzzles (15), automates et langages (21), optimisation de code (20), autres (19) Problèmes qu’on n’arrive à placer ni dans P ni NP-complets (12). Plus que 3!

Problèmes de commis-voyageur. Problèmes concernant la longueur des chemins et cycles d’un graphe (possiblement pondéré.) On a déjà montré que HC, DHC, TSP, TSP2,,sym sont NP-complets.

Problème du chemin le plus long (LP, DLP) Entrée: Graphe (dirigé) G = (V,E), entier k. Question: Existe-t-il dans G un chemin simple de longueur  k? Clairement dans NP: on peut non-déterministement choisir k sommets du graphe et vérifier qu’ils forment un chemin simple.

Théorème: DLP et LP sont NP-complets. Démonstration: On va montrer 3-SAT p DLP. Réutilisons la transformation de 3-SAT à DHC.

3-SAT p DLP. Problème: comment refléter avec des chemins les 2n valeurs possibles des xi? x1v x2v xnv x1 x2 … xn x1f x2f xnf Ce graphe contient 2n chemins passant par tous les sommets et qu’on va assimiler aux 2n valeurs possibles des xi. Lorsque xi est vrai on considère le chemin qui passe par xiv d’abord et xif ensuite. Lorsque xi est faux on considère le chemin qui passe par xif d’abord et xiv ensuite.

Pour représenter les clauses Cj, on rajoute un sommet cj dans le graphe. De plus, chaque fois que xi ou i apparaît dans une clause, on rajoute deux point intermédiaires entre xiv et xif. xi xiv xif c1 c7 c9 Si xi apparaît dans la clause Cj on construit un détour à travers cj qui ne peut être emprunté que lorsque qu’on part de xiv vers xif. Si i apparaît dans la clause Cj, on construit un détour à travers cj qui ne peut être emprunté que lorsque l’on part de xif vers xiv. Le graphe obtenu contient un chemin simple qui passe à travers tous les sommets si et seulement si la formule 3-SAT est satisfiable.

Notes: Pour montrer DLP p LP, on procède comme pour montrer DHC p HC. La transformation nous permet de montrer que le problème est NP-complet même si on spécifie les points entre lesquels on cherche le chemin le plus long. Le problème du chemin le plus court est résoluble en temps polynomial (algorithme de Dijkstra).

Arbre de recouvrement de degré borné (BMST) Entrée: graphe pondéré G = (V,E), borne de degré k, valeur cible C. Question: Existe-t-il un arbre de recouvrement de G avec degré  k et coût  C? Clairement dans NP. LP est le cas particulier de BMST où k = 2, où les poids sont 1 ou 2 et C = |V|-1.  BMST est NP-complet.

Problèmes de sac à dos Dans sa forme la plus générale (Knapsack) Entrée: Un ensemble d’objets avec un poids pi et une valeur vi + une capacité de sac à dos C + un objectif de valeur V. Question: Peut-on choisir un ensemble d’objets dont le poids total est au plus C et la valeur totale au moins V.

Somme de sous-ensemble (Subset-sum) Cas particulier du sac à dos où pi = vi. Entrée: Ensemble d’entiers positifs R = {p1, ..., pn }, valeur cible S. Question: existe-t-il un sous ensemble R’ R tel que pi  R pi = S.

Théorème: Subset-sum est NP-complet. Démonstration: On montre 3-SAT p Subset-sum. Les deux problèmes sont de nature très différentes  la transformation sera compliquée.

Idées de départ: Chaque variable et chaque clause de l’instance de 3-SAT peut-être vraie ou fausse, chaque élément de R fait ou ne fait pas partie de R’. Exploiter cette correspondance. Si on choisit les nombres de R avec des décimales qui sont presque toutes 0, l’effet d’un nombre sur la somme est localisé.

Supposons que l’instance de 3-SAT contient n variables x1, Supposons que l’instance de 3-SAT contient n variables x1, ..., xn et m clauses C1, ..., Cm. On construit des entiers avec m + n décimales: R = {a1, ..., an,b1, ... bn, d1, ..., dm, e1, ...,em}. Les m premières décimales vont correspondre aux clauses et les n suivantes aux variables.

x1 x2 ... xn a1 1 b1 a2 b2  an bn m On veut faire correspondre le choix xi = 1 au choix de ai dans R’ et le choix xi = 0 choix de bi dans R’. Pour y arriver les n dernières décimales de ai et de bi sont 0, sauf celle correspondant à xi qui est 1.

C1 C2 ... Cm a1 1 b1 a2 b2  an bn Exemple: C1 = x1  2  xn Le litéral x1 apparaît dans les clauses C1 et Cm. Le litéral 1 dans C2 seulement Si xi = 1 toutes les clauses contenant xi sont vraies. Si xi = 0, toutes les clauses contenant i sont vraies. Pour le refléter dans l’instance de subset-sum, la jème décimale de ai est 1 si xi apparaît dans Cj et 0 sinon. On choisit la jème décimale de bi si i apparaît dans Cj et 0 sinon.

C1 C2 ... Cm a1 1 b1 a2 b2  an bn Chaque choix de valeur à xi correspond au choix de ai ou de bi. Si on fait ce choix pour chaque i, la somme obtenue est un entier dont les n dernières décimales sont 1. La décimale correspondant à Cj est alors 0,1,2 ou 3 selon le nombre de litéraux vrais que contient Cj.

C1 C2 ... Cm d1 1 e1 d2 e2  dm em Les dj et ej nous permettent d’effacer la distinction entre les clauses satisfaites grâce à 1,2 ou 3 litéraux dans la clause Cj. On choisit 0 pour toutes les décimales de toutes les décimales de dj et ej sauf la j-ème qui est 1.

C1 C2 ... Cm x1 x2 xn S 3 1 Finalement, on choisit 3 pour les m premières décimales de S et 1 pour les n dernières.

Si la formule est satisfiable alors on va trouver R’  R dont la somme est S. Si la formule est satisfiable et que xi = 1 dans l’assignation satisfaisante, on prend ai dans R’ et bi sinon. Si la clause Cj est satisfaite par 1 litéral, on choisit dj et ej. Si elle est satisfaite par 2 litéraux, on ne prend que dj. Si elle est satisfaite par les 3 litéraux on ne prend ni dj ni ej. On peut voir facilement que la somme de R’ est bien S.

Si un R’ avec somme S existe, alors la formule était satisfiable. R’ doit contenir soit ai soit bi car les n dernières décimales de S sont 1. Choisissons xi = 1 ssi ai  R’. Les m premières décimales de S sont 3. Donc pour chaque j  m, il y a au moins un des ai ou des bi dans R’ qui contient un 1 dans la colonne j. Donc la clause Cj est satisfaite.

Corollaire: Knapsack est NP-complet. Démonstration: Clairement dans NP. Subset-sum P Knapsack Car Subset-sum est un cas particulier de Knapsack.

Problème de partition (PART) Entrée: R = {p1, ..., pn}  N. Question: Peut on séparer R en R1, R2 tel que pi  R1 pi = pi  R2 pi? Cas particulier de Subset-sum où la valeur cible est S = ( pi)/2

Théorème: PART est NP-complet. Démonstration: Suffit de montrer Subset-sum p PART. Soit (p1, ..., pn,S) une instance de Subset-sum. Soit S* =  pi. On peut supposer que 0  pi  S  S*. Construisons l’instance de PART (p1, ..., pn, 2S* - S, S* + S). Pour former une partition, il faut donc sélectionner des éléments dont la somme est 2S*. Cela est possible si et seulement si il y a un ensemble de pi dont la somme est S.

Problèmes de répartition et de planification Remplissage de seaux (Bin-packing BP) Entrée: poids p1, ..., pn de n objets, k seaux de capacité c. Question: Peut-on répartir les n objets dans les k seaux tels que la somme des poids de chaque seau n’excède pas c?

Théorème: BP est NP-complet. Démonstration: Clairement dans NP: choix non-déterministe de la répartition et vérification. PART P BP PART est le cas particulier de BP à deux seaux et de capacité ( pi)/2.

Planification de tâches (SWI) Entrée: Un ensemble A de tâches. Pour chaque a  A, un temps d’arrivée r(a), un temps de calcul l(a) et une échéance d(a). On suppose r(a), l(a), d(a)  N+. Question: Peut-on ordonner l’exécution des tâches séquentiellement sur un processeur de façon à ce que l’exécution de chaque tâche débute après r(a) et soit terminée avant d(a)? À noter: les tâches entreprises ne peuvent être interrompues avant leur fin.

Théorème: SWI est NP-complet. Démonstration: Clairement dans NP. PART P SWI L’instance (p1, ..., pn) de PART se transforme en n+1 tâches à faire en temps S+1 où S =  pi. On choisit l(ai) = pi, r(ai) = 0 et d(ai) = S+1. De plus on définit r(an+1) = S/2, l(an+1) = 1 et d(an+1) = S/2 +1. Clairement la tâche an+1 doit être exécuté dans l’intervalle [S/2, S/2 + 1] ce qui n’est possible que si les autres tâches peuvent être réparties en deux groupes avec somme de temps S/2.

Problèmes de clique et de coloriage de graphe On a déjà vu que CLIQUE, IS, et VC sont NP-complets. On peut en déduire que le problème du sous-graphe isomorphe (SI) et du plus grand sous-graphe commun sont NP-complets (Wegener).

Théorème: 3-COL est NP-complet. Démonstration: 3-SAT P 3-COL Réduction à priori difficile. Comment représenter la valeur de variables booléennes à travers un coloriage de graphe?

Première étape très utile: on crée un triangle dans le graphe Première étape très utile: on crée un triangle dans le graphe. Ces trois sommets doivent forcément avoir les trois couleurs. Lorsque par la suite on reliera le sommet bleu à un nouveau sommet du graphe, on pourra être certain que sa couleur ne peut être que rouge ou vert! En associant vert à vrai et rouge à faux, on peut représenter des valeurs booléennes dans le graphe.

x1 1 x2 2 xn n Pour chaque litéral xi, i de l’instance de 3-SAT, on crée les sommets xi et i, reliés entre eux et reliés au sommet bleu. Quoiqu’il arrive, ces sommets ne pourront donc être coloriés qu’en rouge et vert et xi et i devront avoir des couleurs différentes. On veut associer vert à vrai et rouge à faux.

cj1 l1 cj3 cj4 cj6 l2 cj2 l3 cj5 Supposons que Cj = l1  l2  l3. Cette clause est satisfaite si et seulement si au moins un li est vrai. Donc si et seulement si un des sommets li est colorié en vert. Pour refléter cette correspondance, on construit 6 sommets cj1, ..., cj6 reliés à l1, l2, l3 et à nos 3 sommets de départ.

On veut montrer que ce gadget est 3-coloriable ssi un des li est vert. cj1 l1 cj3 cj4 cj6 l2 cj2 l3 cj5 On veut montrer que ce gadget est 3-coloriable ssi un des li est vert. cj6 est forcément vert. cj4 et cj5 sont forcément rouge et bleu. Si cj5 est rouge alors l3 est vert mais si l3 est rouge alors cj5 est bleu. Les sommets cj1, cj2, cj3 ont des couleurs toutes différentes.

Supposons que l1 est vert. cj1 l1 cj3 cj4 cj6 l2 cj2 l3 cj5 Supposons que l1 est vert. On peut donc colorier cj1 en rouge, cj2 en vert et cj3 en vert. (peut importe la couleur de l2) On peut donc colorier cj4 en rouge et cj5 en bleu. Le coloriage est valide peut importe la couleur de l3.

Supposons que l3 est vert mais que l1 et l2 sont rouges. cj1 l1 cj3 cj4 cj6 l2 cj2 l3 cj5 Supposons que l3 est vert mais que l1 et l2 sont rouges. On doit colorier cj1 et cj2 en bleu et vert et donc cj3 en rouge. On peut colorier cj5 en rouge et cj4 en bleu pour compléter le coloriage.

On doit colorier cj5 en bleu et cj4 en rouge. Il reste à montrer que si l1, l2 et l3 sont tous rouges, ce sous-graphe n’est pas 3-coloriable. On doit colorier cj5 en bleu et cj4 en rouge. Les trois sommets cj1, cj2 et cj3 doivent avoir des couleurs différentes mais aucun ne peut être rouge!

On construit en temps polynomial un graphe avec 2n + 6m + 3 sommets. Si la formule de départ est satisfaite, alors on peut utiliser les valeurs des xi satisfiant la formule pour colorier les li en rouge et vert. Comme chaque clause contient un litéral vrai, chaque composante de clause dans le graphe contient un li colorié vert et est coloriable. S’il existe un 3-coloriage du graphe, alors les li sont verts ou rouges et l’on peut assigner des valeurs correspondantes aux xi. Comme les composantes de clauses sont toutes 3-coloriables, chacune contient un li qui est vert. Donc la formule est satisfaite.

Problèmes de formation d’équipes Mariage tri-dimensionel (3DM) Entrée: Trois ensembles disjoints de personnes K1, K2, K3 (compétences différentes) avec |K1| = |K2| = |K3| = n. Ensemble d’équipes possibles T  K1  K2  K3. Question: Peut-on trouver dans T n équipes de 3 personnes telles que chaque personne soit assigné à une et une seule équipe?

Théorème: 3-DM est NP-complet. Démonstration: 3-SAT P 3-DM Réduction à priori difficile. Comment représenter la valeur de variables booléennes à travers les équipes et les compétences?

Soient x1,. , xn les variables et C1, Soient x1, ..., xn les variables et C1, ..., Cm les clauses de la 3-SAT formule . On peut supposer que chaque clause contient exactement 3 litéraux et que la formule contient 3m litéraux en tout. (en comptant les répétitions) Notre seule porte de sortie: s’assurer de mettre en correspondance les choix de valeurs aux xi avec le choix de nos équipes On forme 3 groupes d’experts de taille 6m.

Groupe d’experts K1: répartis en n sous-groupes correspondant aux n variables. Le sous-groupe i contient 2zi experts, où zi est le nombre d’occurrences de xi ou i dans une clause. Pour suivre la construction, on dénote ces experts xil et il pour 1 l  zi. On veut que le choix de xi = 0 ou de xi = 1 se traduise par un choix d’équipes particulier. Pour y arriver: on crée des experts dans les groupe K2 et K3 tels que leur répartition dans une équipe nous forcent soit à assigner tous les xil à des équipes en laissant tous les il sans équipe; soit à assigner tous les il en laissant tous les xil. sans équipe.

On crée dans K2 les 3m personnes ail où 1  i  n et 1  l  zi. On crée dans K3 les 3m personnes bil où 1  i  n et 1  l  zi. À noter: il y a zi experts ail et zi experts bil mais 2zi experts xil et il. Chaque ail et bil ne fait partie que de deux équipes et c’est cette rigidité qui va nous permettre d’encoder les valeurs booléennes.

xi1 i1 i4 ai1 bi1 ai2 bi4 xi4 xi2 ai4 bi2 bi3 ai3 i2 i3 xi3 Supposons zi = 4. On forme 8 équipes à partir de xi1, ..., xi4, i1, ... i4, ai1, ..., ai4, bi1, ..., bi4. Pour placer les a et b dans des équipes on a seulement deux choix. L’un d’eux laisse tous les xil sans équipe, l’autre tous les il.

Il faut maintenant représenter les clauses Cj Il faut maintenant représenter les clauses Cj. On place un expert pj2 dans le groupe K2 et un expert pj3 dans le groupe K3. pj2 et pj3 doivent former une équipe complétée par un expert de K1. Pour relier les valeurs booléennes aux clauses, on choisit: (xil, pj2, pj3)  T, ssi xi apparaît dans Cj et (il, pj2, pj3)  T ssi i apparaît dans Cj.

Notre intention est donc: Choix de valeurs booléennes  choix des équipes pour les ail et bil. Satisfaction des clauses  possibilité d’assigner les p2j, p3j à une équipe. Lorsque ces équipes sont formées, les experts de K1 correspondants aux litéraux faux sont tous assignés à une équipe pour chaque clause, un litéral restant dans K1 est assigné à une équipe. Il reste donc 2m experts de K1 à placer dans des équipes.

On ajoute à K2 les experts qj2 pour 1  j  2m et à K3 les experts qj2 pour 1  j  2m. Pour tous les experts xil, il de K1, on ajoute comme équipes possibles (xil, qj2, qj3) et (il, qj2, qj3). La transformation est maintenant complète. Elle se fait clairement en temps polynomial.

Supposons que x1, ..., xn  {0,1} satisfont la formule . Si xi = 0, on place tous les experts ail, bil dans les équipes (xil,ail,bil), laissant les il sans équipe pour l’instant. Si xi = 1, on place tous les experts ail, bil dans les équipes (il,ail+1,bil), laissant les xil sans équipe pour l’instant. Si xi est vrai, alors les experts xil de K1 n’ont pas encore d’équipe. Si xi apparaît dans Cj, alors on peut donc former une équipe (xil,pj2,pj3). Comme chaque Cj contient un litéral vrai on peut donc assigner des équipes à tous les pj2,pj3. Dans les groupes K2, K3, il ne reste que des experts q2, q3 qui forment les dernières équipes. Donc, il existe un mariage tri-dimensionnel!

Supposons qu’il existe un mariage. Pour chaque i, considérons les ail, bil. S’ils forment des équipes contenant tous les xil, alors on choisit xi = 0. Sinon, on choisit xi = 1. On a assigné des valeurs booléennes aux xi et on veut montrer qu’elles satisfont . Pour chaque j, les points p2j et p3j font partie d’une équipe qui est complétée par un xil ou un il. Si c’est par un xil, alors xi apparaît dans Cj et xi = 1. Même raisonnement pour l’autre cas. Donc chaque Cj contient un litéral vrai et  est satisfiable.

Couverture d’ensemble (Set-cover, SC) Entrée: Un ensemble S, des sous ensembles A1, ..., An de S, un entier k. Question: S est-il l’union de k Ai? 3DM est un cas particulier de SC. S = K1  K2  K3. Union de tous les experts. Les Ai correspondent aux équipes de trois experts. On cherche une couverture de S avec k = |Ki| équipes. Donc SC est NP-complet.

TSP +grand sub commun TSP2, , sym SubIso DS Knapsack DHC p HC SWI TSP BP +grand sub commun TSP2, , sym BMST SubIso DS Knapsack PART SC DHC p HC DLP p LP CLQ p IS p VC 3-COL Subset-sum 3DM NP-complet! SAT p 3-SAT Donc tous NP-complets! Donc il existe des transformations polynomiales entre tous ces problèmes!

Où est la frontière? Des problèmes apparemment très semblables peuvent être de complexité très différente. La différence entre des problèmes dans P et des problèmes NP-complets est souvent subtile.

Mariage tri-dimensionnel Dans P NP-complets 2-SAT k-SAT pour k  3 2-COL k-COL, k  3 Mariage Mariage tri-dimensionnel Plus court chemin entre deux points d’un graphe Plus long chemin entre deux points d’un graphe Faire les séries avec répartition des points (0,1,2) Faire les séries avec répartition des points (0,1,3)

On a vu que VC est NP-complet mais le problème de couverture par arêtes est dans P. Entrée: graphe G = (V,E), entier k. Question: Existe-t-il une couverture par arêtes E’  E avec |E’|  k? (E’ est une couverture par arêtes si pour tout v  V, il existe u  V avec (u,v)  E’.)

Réduction transitive ( P) Entrée: graphe dirigé G = (V,E), entier k. Question: Existe-t-il E’  V  V avec |E’|  k, tel qu’il existe un chemin de u vers v dans G si et seulement si il existe un chemin de u vers v dans G’ = (V,E’).

Plus petit sous-graphe équivalent (NP-complet) Entrée: graphe dirigé G = (V,E), entier k. Question: Existe-t-il E’  E avec |E’|  k, tel qu’il existe un chemin de u vers v dans G si et seulement si il existe un chemin de u vers v dans G’ = (V,E’).

2-SAT  P... mais Max-2-SAT est NP-complet! Entrée: Formule 2-CNF  avec m clauses et entier k  m. Question: Peut-on assigner des valeurs aux xi qui satisfont au moins k clauses?

SAT et le théorème de Schaefer Soit  = {R1, ..., Rk} un ensemble de relations booléennes avec Ri  {0,1}ji. Problème de satisfiabilité généralisée (): Entrée: variables booléennes x1, ..., xn et liste de contraintes C1, ..., Cm. Chaque contrainte est de la forme Ci= (xi1, ..., xis)  Rj. Question: Peut-on assigner des valeurs aux xi telles que toutes les contraintes soient satisfaites?

Exemples: Le problème 3-SAT correspond à  = {R0,R1,R2,R3} avec (x,y,z)  R0  x  y  z; (x,y,z)  R1    y  z; (x,y,z)  R2      z; (x,y,z)  R3      ̅z.

Exemples: Le problème 2-SAT correspond à  = {R0,R1,R2} avec (x,y)  R0  x  y; (x,y)  R1    y; (x,y)  R2    .

Théorème [Schaefer (78)] Pour tout  le problème Gen-SAT() est soit dans P soit NP-complet. Il n’existe que six cas qui sont dans P. 2-SAT Horn-SAT co-Horn-SAT 0-valide-SAT 1-valide-SAT Linéaire-SAT

Horn-SAT: cas particulier de SAT où chaque clause a au plus un litéral positif. i1   i2  ...   ik  y Intuitivement: si presque toutes les occurrences de variables sont négatives, alors choisir tous les xi = 0 semble être un bon point de départ.

Algorithme polynomial pour Horn-SAT Entrée: Instance  de Horn-SAT Initialiser tous les xi à 0. Si une clause est insatisfaite c’est qu’elle est de la forme C = xj. Donc choisir xj = 1. Enlever les occurrences de j. Enlever les clauses où xj apparaît. Répéter 2 et 3 jusqu’à ce que la formule soit satisfaite où qu’une clause devienne vide.

Les autres cas de Schaefer co-Horn-SAT: dual de Horn-SAT 0-valide: cas où la solution  i xi = 0 satisfait toutes les contraintes. 1-valide: cas où la solution  i xi = 1 satisfait toutes les contraintes. Linéaire-SAT: cas où toutes les relations sont équivalents à des conjonctions de ou-exclusif de litéraux, e.g. (1  x2  x3)  (x3  x5). Algorithme utilisant l’algèbre linéaire.