PC3

publicité
É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
Téléchargement