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