la feuille de TD 6 avec l ments de correction

publicité
Exercice 3 :
AAC
2010–2011
Master1 d’Informatique
UFR IEEA
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 = N P ou vraie
si et seulement si P 6= N P . Justifier brièvement.
(Af1) Toute propriété N P est aussi P .
(Af2) Toute propriété P est 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 P1 est P, P2 est NP-dur, P3 NP.
Pour chacune des affirmations suivantes, dire si elle vous semble "Vraie", "Fausse" ou "fausse si N P 6= P ":
(Af1) Si P1 se réduit polynomialement en Q, Q est P.
(Af2) Si Q se réduit polynomialement en P1 , Q est P.
(Af3) Si Q se réduit polynomialement en P2 , Q est NP-dur.
(Af4) Si P2 se réduit polynomialement en Q, Q est NP-dur.
(Af5) Si Q se réduit polynomialement en P3 , Q est NP.
(Af6) Si P3 se réduit polynomialement en Q, Q est NP.
Exercice 2 : Coloriage
Rappel: 3 − COL est le problème du 3-coloriage de graphes défini par:
Entrée : G = (S, A) un graphe non-orienté
Sortie :
Oui, si il existe un coloriage correct de G en 3 couleurs, i.e. une application coul : S → [1..3] telle que
∀x, y ∈ S, (x, y) ∈ A =⇒ coul(x) 6= coul(y).
Non, sinon.
3 − Col 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-orienté
k un entier Sortie :
Oui, si il existe un coloriage correct de G en k couleurs, 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 4 − COL le problème du 4-coloriage de graphes défini par:
Entrée : G = (S, A) un graphe non-orienté
Sortie :
Oui, si il existe un coloriage correct de G en 4 couleurs, 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 4 − COL est NP.
Q 3. Proposer une réduction polynomiale de 3 − Col dans 4 − Col. Justifier.
Q 4. Qu’en déduire pour 4 − Col?
Q 5. Montrer, sans exhiber la réduction, que 4 − Col se réduit polynomialement dans 3 − Col.
Soit le problème de décision SommeIdentique défini par:
Donnée:
n, p, deux entiers positifs
x1 , ....xn , n entiers
y1 , ..., yp , p entiers
Sortie:
Oui, Ssi on peut extraire deux sous-listes non
P vides desPxi , yi qui ont même somme, i.e.
∃J ⊂ [1..n], J 6= ∅, K ⊂ [1..p], K 6= ∅ tq j∈J xj = k∈K yk
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 N P
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 , · · · , xn – n entiers
Sortie:
P
P
Oui Ssi il existe J ⊂ [1..n] tel que i∈J xi = i∈J
/ xi
Q 4. P artition est N P −complet.Qu’en déduire pour SommeIdentique?
Exercice 4 : Processus
Soit un système temps réel avec n processus asynchrones et m ressources. 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 k processus.
Le problème de décision DecProc est donc:
Donnée:
n, le nombre de processus
m le nombre de ressources
pour chaque processus i, la liste Pi des ressources qu’il bloque.
k le nombre de processus que l’on souhaite activer
Sortie:
Oui, si on peut activer k processus 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 2 et 3 et 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 n boolé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 t est 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 I de Independent Set , une instance red(I) de DecProc telle que red(I)
soit positive Ssi I l’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)
m le nombre de ressources p = card(Arcs)
pour chaque processus i, la liste Pi des ressources qu’il bloque par Pi = l’ensemble des arcs adjacents au sommet i.
k le 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 I est une instance positive de Independent Set, il existe donc un sous-ensemble de cardinal k
de sommets indépendants: les k processus associés ne partagent donc aucune ressource et forment donc un sous-ensemble
de cardinal k de processus qu’on peut activer simultanément: red(I) est positive.
Réciproquemment, si red(I) est positive, il existe un sous-ensemble de k processus qu’on peut activer simultanément:
les k sommets associés ne partagent donc pas d’arcs et sont indépendants: I est bien positive.
Q 3. Que pensez-vous de la complexité du problème DecProc si chaque processus utilise une seule ressource?
n, le nombre de processus
m le nombre de ressources
pour chaque processus i, la liste Pi des ressources qu’il bloque.
Sortie:
k maximum tel qu’on puisse activer k processus 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 suffisamment 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 (1 ≤ k ≤ n)
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


0 2 3 3
2 0 5 1

D=
3 5 0 4
3 1 4 0
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.
1. Y-a-t-il une solution pour d = 1 et k = 3? Si oui, laquelle?
2. Montrer que le problème des casernes de pompiers est NP.
3. Montrer que le problème des casernes se réduit en SET _COV ERIN G.
4. Montrer que SET _COV ERIN G se réduit dans le problème des casernes
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;
Q
Q
Q
Q
Q
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
Sortie: k minimum tel qu’on peut retrouver k villes 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:
A une matrice m × n d’entiers (relatifs),
B un vecteur de m entiers (relatifs).
Sortie:
Oui, si il existe un vecteur de n entiers(relatifs) X tel que AX ≤ B, Non sinon.
Q 1. Montrer que 3 − CN 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 3 − CN F − 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.
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 j et donc v(Φ) = V rai d’où Φ satisfiable;
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 LIT est donc le problème de décision suivant:
Donnée:
n nombre de personnes –P1 , ...Pn seront les personnes
q nombre de caractéristiques – C1 , .., Cq seront les caractéristiques
n listes 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, 1 ≤ j ≤ q), pour chaque équipe ( ∀e, 1 ≤ e ≤ 2), il existe une
personne de l’équipe (i tel 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éristiques 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 LIT est NP-complet.
Aide: Réduire polynômialement 3 − SAT 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 I de 3 − CN F − SAT une instance red(I) de SP LIT telle que red soit
calculable en temps polynomial et I soit une instance positive (de 3 − CN F − sat) Ssi red(I) est une instance
positive de SP LIT .
Rappel/ 3 − CN F − Sat est défini par:
Donnée: X = {x1 , ..., xn }, Φ = ∧pi=1 Ci , chaque Ci étant une disjonction de trois littéraux.
On supposera que chaque variable de X apparaît au moins une fois dans Φ.
Sortie: Oui Ssi Φ est satisfiable.
Sont donc I défini par X = {x1 , ..., xn }, Φ = ∧pi=1 Ci .
on définit red(I) par:
n′ = 2n + 1 // n Personnes :xi 1 ≤ i ≤ n, ¬xI ) 1 ≤ i ≤ n, et 1 personne Supp
q = n + p // 2 types de nombre de caractéristiques "être de type xi " (1 ≤ i ≤ n) et "valider Cj " , 1 ≤ j 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 Cj contient le litéral xi (resp. ¬xi ).
la personne Supp a toutes les caractéristiques "valider Cj " , 1 ≤ j p (et seulement celles-là);
red est bien calculable en temps polynômial. Montrons qu’elle est correcte:
Supposons que I soit une instance positive: donc il existe v telle que v(Φ) = vrai On construit alors une équipe E1 en
prenant tous les xi tels que v(xi ) = vrai et tous les ¬xi tels 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, E1 contient 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 (1 ≤ i ≤ n) 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
6
Téléchargement