UFR IEEA
AAC 2010–2011
Master1 d’Informatique
Fiche TD-Les propriétés NP-dures, les réductions polynômiales
Exercice 1 : Vrai ou Faux
Q 1. Pour chaque affirmation suivante, dire si elle est vraie, fausse, vraie si et seulement si P=NP ou vraie
si et seulement si P6=N P . Justifier brièvement.
(Af1) Toute propriété N P est aussi P.
(Af2) Toute propriété Pest aussi N P .
(Af3) Une propriété N P est une propriété non polynomiale.
(Af4) Il existe une propriété N P polynomiale.
(Af5) Il existe une propriété N P non polynomiale.
(Af6) Une propriété N P -dure n’est pas P.
Q 2. Soient P1, P2, P3, Q des problèmes de décision.
Supposons qu’on sache que P1est P, P2est NP-dur, P3NP.
Pour chacune des affirmations suivantes, dire si elle vous semble "Vraie", "Fausse" ou "fausse si NP 6=P":
(Af1) Si P1se réduit polynomialement en Q,Qest P.
(Af2) Si Qse réduit polynomialement en P1,Qest P.
(Af3) Si Qse réduit polynomialement en P2,Qest NP-dur.
(Af4) Si P2se réduit polynomialement en Q,Qest NP-dur.
(Af5) Si Qse réduit polynomialement en P3,Qest NP.
(Af6) Si P3se réduit polynomialement en Q,Qest NP.
Exercice 2 : Coloriage
Rappel: 3COL est le problème du 3-coloriage de graphes défini par:
Entrée : G= (S, A)un graphe non-orien
Sortie :
Oui, si il existe un coloriage correct de Gen 3couleurs, i.e. une application coul :S[1..3] telle que
x, y S, (x, y)A=coul(x)6=coul(y).
Non, sinon.
3Col est NP-complet
Q 1.Soit COL le problème du coloriage de graphes défini par:
Entrée :
G= (S, A)un graphe non-orien
kun entier Sortie :
Oui, si il existe un coloriage correct de Gen kcouleurs, i.e. une application coul :S[1..k]telle que
x, y S, (x, y)A=coul(x)6=coul(y).
Non, sinon.
Montrer que COL est NP-complet.
Q 2.Soit 4COL le problème du 4-coloriage de graphes défini par:
Entrée : G= (S, A)un graphe non-orien
Sortie :
Oui, si il existe un coloriage correct de Gen 4couleurs, i.e. une application coul :S[1..4] telle que
x, y S, (x, y)A=coul(x)6=coul(y).
Non, sinon.
Q 2.1.Montrer que le problème 4COL est NP.
Q 3. Proposer une réduction polynomiale de 3Col dans 4Col. Justifier.
Q 4. Qu’en déduire pour 4Col?
Q 5. Montrer, sans exhiber la réduction, que 4Col se réduit polynomialement dans 3Col.
Exercice 3 :
Soit le problème de décision SommeIdentique défini par:
Donnée:
n, p, deux entiers positifs
x1, ....xn,nentiers
y1, ..., yp,pentiers
Sortie:
Oui, Ssi on peut extraire deux sous-listes non vides des xi,yiqui ont même somme, i.e.
J[1..n], J 6=, K [1..p], K 6=tq PjJxj=PkKyk
Exemples:
pour X= (10,4,1,22), Y = (3,6,9), il y a une solution: 10+4+1=6+9;
pour X= (1,2,9), Y = (7,6,7), il n’y a pas de solution.
Q 1. Pour chacun des exemples suivants, dire si il y a une solution:
1. X= (2,4,2,6), Y = (12,7,1)
2. X= (1,1,2,4), Y = (10,12,11)
3. X= (2,4,2,6), Y = (9,7,11)
Q 2. Montrer que le problème SommeIdentique est NP
Q 3. Montrer que le problème P artition se réduit polynômialement dans SommeIdentique où le problème
P artition est défini par:
Donnée:
n –un nb d’entiers
x1,···, xnnentiers
Sortie:
Oui Ssi il existe J[1..n]tel que PiJxi=Pi /Jxi
Q 4. P artition est NP complet.Qu’en déduire pour SommeIdentique?
Exercice 4 : Processus
Soit un système temps réel avec nprocessus asynchrones et mressources. Quand un processus est actif, il
bloque un certain nombre de ressources et une ressource ne peut être utilisée que par un seul processus. On
cherche à activer simultanément kprocessus.
Le problème de décision DecProc est donc:
Donnée:
n, le nombre de processus
mle nombre de ressources
pour chaque processus i, la liste Pides ressources qu’il bloque.
kle nombre de processus que l’on souhaite activer
Sortie:
Oui, si on peut activer kprocessus simultanément, non sinon.
Par exemple si n= 4,m= 5, et P1={1,2}, P2={1,3}, P3={2,4,5}, P4={1,2,4}on peut activer
simultanément les processus 2et 3et donc la réponse est Oui pour k= 2 mais la réponse est N on pour k= 3.
Q 1. Montrer que le problème DecProc est N P .
Exemple de solution:
Remarque préliminaire: la taille du problème est au moins n+m.
Un certificat est simplement un ensemble de processus, donc un sous-ensemble de {1, ..., n}. Un certificat peut donc
être codé par un vecteur de nbooléens et la taille d’un certificat est donc n, donc inférieure à la taille du problème.
La vérification consiste juste à vérifier que deux processus actifs ne partagent pas une ressource, et que le cardinal est
bien k, soit:
//probleme donne par n, P1, ...Pi
//certificat : ensemble de processus
2
boolean correct(certificat certif){
ensemble R=ensemble vide; //les ressources utilisees
int card=0; // pour calculer card (certif), le nb de processus actives
pour i de 1 à n
si certif.appartient(i) alors{
card++;
si intersection( Pi, R) est non vide
alors return False; //conflit sur au moins une ressource
sinon R=union(R, Pi);}
fsi
fpour
return (card == k);}
L’algorithme de vérification est bien polynomial; sa complexité exacte dépend de la complexité de appartient(),
intersection(,) et union(,) mais sera de toute façon polynomiale, le coût de ces opérations étant polynomial.
Remarque 1: si on veut préciser cette complexité -ce qui était non demandé-, soit Pa(x)(resp. Pin(x), Pu(x)) bornant
la complexité de appartient() pour un ensemble de cardinal au plus x(resp. le test du vide de l’intersection(resp. le
calcul de l’union) de deux ensembles de cardinal au plus x), le coût de l’algo est en O(n(Pa(n) + Pin(m) + Pu(m))2)
soit O(n(Pa(t) + Pin(t) + Pu(t))2), si test la taille du problème.
Remarque 2: pour beaucoup, la notion de certificat semble encore confuse; un certificat est juste "un essai de solution",
pas forcément une solution correcte;
Q 2. En utilisant le fait que le problème Independent Set est N P -dur, montrer que le problème DecProc
est N P -dur.
Remarque: Attention à ne pas se tromper de sens dans la réduction!!!!!
Il fallait réduire Independent Set , connu N P -dur, dans DecProc, et non le contraire.
Il faut donc associer à toute instance Ide Independent Set , une instance red(I)de DecProc telle que red(I)
soit positive Ssi Il’est.
Une instance de Independent Set est la donnée d’un graphe (Sommets, Arcs)et d’un entier k0.
On définit red(I)par:
n, le nombre de processus par n=card(Sommets)
mle nombre de ressources p=card(Arcs)
pour chaque processus i, la liste Pides ressources qu’il bloque par Pi=l’ensemble des arcs adjacents au sommet i.
kle nombre de processus que l’on souhaite activer par k=ko
La réduction est bien polynomiale (il faut juste calculer card(Sommets), card(Arcs)et pour chaque sommet, les arcs
adjacents).
Elle est bien exacte: si Iest une instance positive de Independent Set, il existe donc un sous-ensemble de cardinal k
de sommets indépendants: les kprocessus associés ne partagent donc aucune ressource et forment donc un sous-ensemble
de cardinal kde processus qu’on peut activer simultanément: red(I)est positive.
Réciproquemment, si red(I)est positive, il existe un sous-ensemble de kprocessus qu’on peut activer simultanément:
les ksommets associés ne partagent donc pas d’arcs et sont indépendants: Iest bien positive.
Q 3. Que pensez-vous de la complexité du problème DecProc si chaque processus utilise une seule ressource?
Le problème devient bien sûr polynômial et peut par exemple être résolu par un glouton:
//probleme donne par n, P1, ...Pi
//certificat : ensemble de processus
boolean solve(){
ensemble R=ensemble vide; //les ressources utilisees
int card=0; // pour calculer e nb de processus actives
pour i de 1 à n
si intersection( Pi, R) est vide
alors { card++; R=union(R, Pi);}
fsi
fpour
return (card >= k);}
Q 4. Que pensez-vous de la complexité du problème DecProc si chaque ressource est utilisée par au plus
deux processus?
Il est toujours N P dur puisque, dans les instances obtenues par réduction dans la question 2, chaque ressource (un
arc) est utilisée par au plus deux processus (ses extrémités).
Q 5. Que pensez-vous de la complexité du problème d’optimisation associé OptProc:
Donnée:
3
n, le nombre de processus
mle nombre de ressources
pour chaque processus i, la liste Pides ressources qu’il bloque.
Sortie:
kmaximum tel qu’on puisse activer kprocessus simultanément.
On peut dire qu’il est N P dur: si on avait un algorithme polynômial pour le problème d’optimisation, on en aurait
un pour celui de décision! (puisque (I(n, m, (P i), k).DecP roc() = (I(n, m, (P i)).OptP roc() >=k)).
Exercice 5 : Les casernes de pompiers
Le problème des casernes de pompiers consiste à placer des casernes de telle façon que chaque ville soit suff-
isamment proche d’une caserne. Plus précisèment, le problème est le suivant:
Entrée:
n, un entier (un entier de 1 à n représentera une ville);
D, une matrice carrée symétrique (n×n) d’entiers positifs ou nuls. (D(i,j)=D(j,i) représente la distance de i à
j; on supposera que D(i,i)=0 pour tout i).
d, un entier positif;
k, un entier (1kn)
Sortie: Oui, si on peut trouver k villes telles que toute ville soit à distance inférieure ou égale à d d’une de
ces villes, non sinon.
Exemple: soit n=4 et la matrice suivante
D=
0233
2051
3504
3140
Pour d= 2 et k= 2, il y a une solution: les "villes" 2 et 3. Pour d= 1 et k= 2, il n’y a pas de solution.
Q 1. Y-a-t-il une solution pour d= 1 et k= 3? Si oui, laquelle?
Q 2. Montrer que le problème des casernes de pompiers est NP.
Q 3. Montrer que le problème des casernes se réduit en SET _COV ERIN G.
Q 4. Montrer que SET _COV ERIN G se réduit dans le problème des casernes
Q 5. Soit maintenant le problème d’optimisation:
Entrée:
n, un entier (un entier de 1 à n représentera une ville);
D, une matrice carrée symétrique (n×n) d’entiers positifs ou nuls. (D(i,j)=D(j,i) représente la distance de i à
j; on supposera que D(i,i)=0 pour tout i).
d, un entier positif;
Sortie: kminimum tel qu’on peut retrouver kvilles telles que toute ville soit à distance inférieure ou égale
à d d’une de ces villes, non sinon.
Montrer que si le problème d’optimisation était polynomial, le problème de décision le serait aussi, et
réciproquement.
Exercice 6 : Programmation Linéaire en entiers
Une instance du problème P LinEnt de Programmation linéaire en entiers est définei par
Donnée:
Aune matrice m×nd’entiers (relatifs),
Bun vecteur de mentiers (relatifs).
Sortie:
Oui, si il existe un vecteur de nentiers(relatifs) Xtel que AX B, Non sinon.
Q 1. Montrer que 3CN F SAT (le problème de la satisfiabilité d’une expression booléenne sous forme
conjonctive) se réduit polynomialement dans P LinEntle problème de Programmation linéaire en entiers. Qu’en
déduire?
Q 2. Pensez-vous que P LinEnt se réduit polynomialement en 3CNF SAT ?
4
Q 3. Pourquoi peut-on affirmer que Clique se réduit en P LinEnt? Proposer une réduction polynomiale de
Clique en P LinEnt.
Exercice 7 : SPLIT
La donnée est un ensemble de personnes, un ensemble de caractéristiques - être gaucher, être boulanger, avoir
les yeux gris, aimer JAVA...-, et pour chaque personne un certain nombre de ces caractéristiques: une personne
peut avoir plusieurs caractéristiques, n’en avoir aucune, les avoir toutes...
Le but du jeu est de séparer l’ensemble de personnes en deux équipes telles que dans chaque équipe, pour
chaque caractéristique, il y ait quelqu’un qui possède cette caractéristique. Les deux équipes peuvent être de
tailles différentes mais sont disjontes.
Exemple: Supposons qu’il y ait 4 caractéristiques - A= connaitre l’anglais, B= avoir les yeux bleus, C=
être clown, D= danser le tango- et 5 personnes -P1, P2, P3, P4, P5- dont les caractéristiques sont: P1:AB, P2:
AC, P3:D, P4:B, P5:ACD. On peut alors choisir comme équipes (P1, P2, P3)et (P4, P5)ou (P1, P5)et
(P2, P3, P4).
Formellement le problème SP LI T est donc le problème de décision suivant:
Donnée:
nnombre de personnes –P1, ...Pnseront les personnes
qnombre de caractéristiques – C1, .., Cqseront les caractéristiques
nlistes de caractéristiques –par exemple un tableau de booléens possede avec possede(i, j) = V rai Ssi Pi
possède Cj
Sortie: Oui, Ssi il existe une répartition des personnes en deux équipes (i.e. une application af f :{1, ..., n} →
{1,2}) telle que pour chaque caractéristique ( j, 1jq), pour chaque équipe ( e, 1e2), il existe une
personne de l’équipe (itel que af f (i) = e) qui possède cette caractéristique (possede(i, j)).
Q 1. Pour chacune des instances suivantes du problème, dire si il y a une solution (il y a toujours 4 caractéris-
tiques A, B, C, D.)
I1: P1: A B , P2: A C, P3: C D, P4: B
I2: P1: A B C, P2: A D, P3: A B, P4: A C D
I3: P1: A B, P2: A B C D, P3: C D
I4: P1: A B D, P2: A C , P3: B C D, P4: B
Q 2. Montrer que SP LI T est NP-complet.
Aide: Réduire polynômialement 3SAT dans SP LIT . Pour chaque variable xi, on pourra créer deux
personnes (xi, V rai)et (xi, F aux). On pourra ajouter une personne SU P P . Les caractérisitiques seront: être
de type xi, et valider la clause Cj.
On va donc associer à toute instance Ide 3CN F SAT une instance red(I)de SP LIT telle que red soit
calculable en temps polynomial et Isoit une instance positive (de 3CN F sat) Ssi red(I)est une instance
positive de SP LIT .
Rappel/ 3CNF Sat est défini par:
Donnée: X={x1, ..., xn},Φ = p
i=1Ci, chaque Ciétant une disjonction de trois littéraux.
On supposera que chaque variable de Xapparaît au moins une fois dans Φ.
Sortie: Oui Ssi Φest satisfiable.
Sont donc Idéfini par X={x1, ..., xn},Φ = p
i=1Ci.
on définit red(I)par:
n= 2n+ 1 // n Personnes :xi1in,¬xI) 1 in, et 1 personne Supp
q=n+p// 2 types de nombre de caractéristiques "être de type xi" (1in) et "valider Cj" , 1j p.
Chaque personne xi(resp. ¬xi)possède la caractéristique "être de type xi" et toutes les caractéristiques "valider Cj"
telles que si Cjcontient le litéral xi(resp. ¬xi).
la personne Supp a toutes les caractéristiques "valider Cj" , 1j p (et seulement celles-là);
red est bien calculable en temps polynômial. Montrons qu’elle est correcte:
Supposons que Isoit une instance positive: donc il existe vtelle que v(Φ) = vrai On construit alors une équipe E1en
prenant tous les xitels que v(xi) = vrai et tous les ¬xitels que v(xi) = f aux. L’équipe a bien toutes les caractéristiques
"être de type xi" ; de plus, comme v(Φ) = vrai, pour chaque j,E1contient un littéral qui a la caractéristique "valider
Cj" L’autre équipe a un littéral qui a la caractéristique "être de type xi" pour tout i(1in) et Supp qui valide
toutes les autres caractéristiques La répartition est bien correcte et red(I)est bien une instance positive.
Réciproquement, supposons que red(I)soit une instance positive. Alors soit une répartition correcte: nécessairement
chaque équipe contient un et un seul littéral "de type xi". Prenons l’équipe qui ne contient pas Supp. Posons v(xi) = vrai
5
si cette équipe contient xi,v(xi) = f aux si l’équipe contient ¬xi. Comme l’équipe a toutes les caractéristiques "valider
Cj" , on a v(Cj) = V rai pour tout jet donc v(Φ) = V rai d’où Φsatisfiable;
6
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !