École polytechnique Promotion 2011 Cours Majeure informatique conception et analyse d'algorithmes TD 3 NP-complétude, branch-and-bound, algorithmes exponentiels 2 octobre 2013 1. N P -complétude de HITTING-SET Etant donné un ensemble S de cardinal n et une collection C de sous-ensembles de S , et étant donné un entier k , le problème est de décider s'il existe un sous-ensemble S 0 de S de taille au plus k et qui contienne au moins un élément de chaque ensemble de C . Montrer, par réduction à partir de RECOUVREMENT-PAR-SOMMETS, que ce problème est N P -complet. 2. N P -complétude de MIN-COUPE-CIRCUIT Soit G = (X, A), un graphe orienté où X est l'ensemble des sommets et A ⊂ X × X celui des arcs (orientés). On rappelle qu'un circuit est une suite d'arcs de la forme : (y1 , y2 ), (y2 , y3 ), . . . , (yk−1 , yk ), (yk , y1 ) Un coupe-circuit est un sous-ensemble C de A tel que le graphe (X, A\C), obtenu en supprimant les arcs de C est sans circuit. On examine ici le problème MIN-COUPE-CIRCUIT de la détermination d'un coupe-circuit contenant un nombre d'arcs minimum. i. Donner une version décision du problème et montrer que celle-ci est dans la classe N P . A partir d'un graphe non-orienté G = (X, E) on construit un graphe orienté 0 G = (X 0 , A) de la façon suivante : Soit X = {x1 , x2 , . . . , xn }, G0 a 2n sommets : X 0 = {x01 , x02 , . . . , x0n , x11 , x12 , . . . , x1n } L'ensemble des arcs A est composé de deux sous-ensembles A0 et A00 : A0 = {1 ≤ i ≤ n|(x0i , x1i )} A partir de toute arête {x, y} de E on construit 2 arcs (x1 , y 0 ) et (y 1 , x0 ) dans A00 . Ainsi le nombre d'arcs de G0 est 2m + n où m est le nombre d'arêtes de G. ii. Montrer que si C est un coupe-circuit de G0 , l'ensemble obtenu à partir de C en remplaçant tous les arcs (x1i , x0j ) par (x0i , x1i ) est encore un coupe-circuit. En déduire que l'on peut obtenir un coupe-circuit de G0 ayant un nombre d'arcs inférieur ou égal à celui de C et ne contenant que des arcs de A0 . iii. Montrer que la version décision de MIN-COUPE-CIRCUIT est un problème N P -complet ; vous utiliserez la construction proposée. 1 3. Programmation dynamique sur les sous-ensembles pour le problème du voyageur de commerce. On se donne un graphe non orienté G = (V, E) sur l'ensemble de sommets V = {1, 2, . . . , n}, chaque arête (i, j) ∈ E étant munie d'une longueur d(i, j). Le problème est de trouver un parcours 1 = v0 , v1 , . . . , vn = 1 visitant Pn−1 tous les sommets du graphe, et minimisant la distance totale parcourue D = i=0 d(vi , vi+1 ). L'algorithme trivial pour résoudre ce problème consiste à parcourir toutes les permutations possibles, ce qui donne une complexité en O(n!). On se propose dans cet exercice de faire mieux, en donnant un algorithme de complexité exponentielle. Pour tout sous-ensemble non vide S ⊂ {2, . . . , n} on note OPT[S; i] la longueur du plus court chemin commençant au sommet 1, visitant toutes les villes de S \ {i} une et une seule fois, et nissant au sommet i. i. Soit S ⊂ {2, . . . , n} de cardinal au moins 2. Donner une expression de OPT[S; i] en fonction des distances et des nombres OPT[S \ {i}; j] pour j ∈ S \ {i}. ii. En déduire un algorithme pour résoudre le problème du voyageur de commerce de complexité O(n2 2n ). 4. Arbres de recherche optimisé pour 3-SAT (Complexité paramétrique) On rappelle que le problème 3-SAT porte sur les formules booléennes f en forme normale conjonctive, dont chaque clause contient au plus 3 litérals. On note n le nombre de variables de la formule et m le nombre de clauses, qu'on suppose 2 à 2 distinctes. On étudie trois améliorations successives de l'algorithme de recherche arborescente de complexité O∗ (2n ). (On rappelle que dans la notation O∗ (2n ) on néglige les termes polynomiaux en n et en m : f (n, m) = O∗ (g(n)) s'il existe un polynome P (n, m) tel que |f (n, m)/g(n)| ≤ P (n, m) pour tout n, m assez grands. Dans la suite on s'eorcera de n'utiliser que des algorithmes dont la complexité dépend polynomialement en m et donc on omet les dépendances en m.) 1. En raisonnant sur les aectations possibles des variables de la première clause, donner un algorithme dont la complexité T (n) satisfait la récurrence : T (n) ≤ T (n − 1) + T (n − 2) + T (n − 3) + Poly(n). En déduire que l'on peut résoudre 3-SAT en temps O∗ (X n ) où X ≈ 1.8392 est la racine positive de l'équation X 3 = X 2 + X + 1. 2. Soit Φ une formule en 3-CNF, et supposons qu'il existe dans Φ une variable x telle que x et x̄ apparaissent dans deux clauses diérentes. Montrer que l'on peut répondre au problème en quatre appels récursifs, dont deux sur une formule à (n − 2) variables et deux sur une formule à (n − 3) variables. En déduire un algorithme pour 3-SAT de complexité O∗ (Y n ) où Y ≈ 1.7692 est la racine positive de Y 3 = 2Y + 2. 3. Soit A une assignation partielle des variables et Φ une formule. On dit que A est bonne (relativement à Φ) si toute clause de Φ dont une variable est aectée par A est satisfaite par A. Montrer que si A est bonne, alors Φ[A] est satisable si et seulement si Φ l'est, et que si A n'est pas bonne, alors Φ[A] contient une clause de taille 2. 2 4. En utilisant la propriété démontrée en 3., améliorer l'algorithme proposé en 1., et donner un algorithme pour 3-SAT dont la complexité T (n) vérie : T (n) ≤ max T (n − 1), T2 (n − 1) + T2 (n − 2) + T2 (n − 3) + Poly(n), T2 (n) ≤ max T (n − 1), T2 (n − 1) + T2 (n − 2) + Poly(n), où T2 (n) désigne la complexité de l'algorithme lorsqu'il est appelé sur une formule contenant une clause de taille 2. En déduire√ que T (n) = O∗ (Z n ), où Z est la solution positive de Z 2 = Z + 1, i.e. Z = 1+2 5 ≈ 1.6180. 3