Vous êtes sur la page 1sur 6

2017–2018

ACT
Master1 d’Informatique
FST- Département Informatique
Fiche TD-Les propriétés NP-dures, les réductions polynomiales

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 .
vraie si et seulement si P = N P , donc sans doute fausse
(Af2) Toute propriété P est aussi N P .
vraie puisque P ⊂ N P
(Af3) Une propriété N P est une propriété non polynomiale.
Fausse puisque P ⊂ N P
NP= Non Déterministe polynomiale
(Af4) Une propriété N P peut être polynomiale.
Vraie puisque P ⊂ N P
(Af5) Une propriété N P -dure n’est pas P .
vraie si et seulement si P 6= N P
Q 2. Soient P1 , P2 , P3 , Q des propriétés.
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.
Fausse
(Af2) Si Q se réduit polynomialement en P1 , Q est P.
Vraie
(Af3) Si Q se réduit polynomialement en P2 , Q est NP-dure.
Fausse
(Af4) Si P2 se réduit polynomialement en Q, Q est NP-dure.
Vraie
(Af5) Si Q se réduit polynomialement en P3 , Q est NP.
Vraie
(Af6) Si P3 se réduit polynomialement en Q, Q est NP.
Fausse

Exercice 2 : Processus
Rappel du problème (cf feuille de TD précédente):
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.
Q 1. En utilisant le fait que le problème Independent Set, montrer que le problème DecProc est N P -dur.
Rappel: Le problème qui consiste à tester l’existence d’un ensemble de k noeuds indépendants (i.e. non
reliés) dans un graphe est N P −complet. Formellement, le problème de décision INDEPENDENT est:
Entrée:
G = (S, A) - -un graphe
k - -un entier
Sortie: Oui, si il existe un sous-ensemble indépendant de cardinal k, i.e. une partie I de S de cardinal k
telle qu’aucun arc ne relie deux sommets de I ((I × I) ∩ A = ∅).
Remarque: Attention à ne pas se tromper de sens dans la réduction!!!!!
Il faut 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) omme suit:
n, le nombre de processus est défini par n = card(Sommets)
m le nombre de ressources est défini par p = card(Arcs)
Pour chaque processus i, la liste Pi des ressources qu’il bloque est définie par Pi = l’ensemble des ressources associées
aux arcs adjacents au sommet i.
k est 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 2. Que pensez-vous de la complexité du problème d’optimisation associé OptProc:
Donnée:
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 polynomial 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 3 : Les chevaliers de la Table Ronde


n chevaliers veulent s’installer autour d’une table ronde à n places mais certains chevaliers sont ennemis. On
veut savoir si on peut les installer autour de la table sans que deux ennemis se retrouvent côte à côte -la donnée
du problème est donc les n chevaliers et toutes les "paires" d’ennemis.
Q 1. Montrer que le problème est N P .
Q 2. Montrer que le problème est N P − dur en utilisant le fait que le problème de l’existence d’un cycle
Hamiltonien dans un graphe est N P −complet.
Q 3. Montrer que le problème est N P −complet.

Exercice 4 : Programmation Linéaire en entiers


Un problème de Programmation linéaire en entiers sera du type:
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.
Montrer que 3-CNF-SAT (le problème de la satisfiabilité d’une expression booléenne sous forme conjonctive)
se réduit polynomialement dans le problème de Programmation linéaire en entiers. Qu’en déduire?

Exercice 5 : Chemin Hamiltonien: de la décision à l’optimisation


Soit le problème de décision DecHam
Entrée: G, un graphe non dirigé, A et B deux sommets du graphe

2
Sortie: Oui, si il existe un chemin dans G partant de A arrivant en B et visitant une et une seule fois
chaque sommet
Soit maintenant le problème ConstrHam
Entrée: G, un graphe non dirigé, A et B deux sommets du graphe
Sortie: Un chemin partant de A arrivant en B et visitant une et une seule fois chaque sommet si il en existe
un, et "Non" sinon
Q 1. Supposons qu’on ait un algorithme polynomial pour ConstrHam: existerait-il un algorithme polynomial
pour DecHam?
Q 2. Réciproquement, supposons qu’on ait un algorithme polynomial pour DecHam: comment en déduirait-on
un algorithme polynomial pour ConstrHam?
par exemple, on prend les arcs un à un: si le pb a une solution ss l’arc, on l’enlève!

ConstrHam(G, A, B)
//G=(S,Arcs)
si DecHam(G, A , B)
alors
pour chaque arc a
si DecHam( (S,Arcs-{a}), A , B) alors enlever a à Arcs
//le graphe est maintenant juste un chemin hamiltonien de A à B
sortir le chemin partant de A
sinon
sortir Non

Correction invariant: Arcs contient un chemin hamiltonien. Tout chemin hamiltonien contenu dans Arcs contient les
arcs qui ont déjà été "étudiés" et n’ont pas été enlevés.
Complexité est bien polynomiale (<= à n* complexité de DecHam pour un graphe à n arcs; si n est le nombre d’arcs
de G)
Note Biblio: Un cas particulier de ce problème est celui du "KnightTour" où le but est de parcourir toutes
les cases d’un échiquier en se déplaçant avec un cavalier, problème aussi appelé problème de Rudrata, poéte du
Cachemire du 9e siècle qui posa la question dans un poème.

Exercice 6 : Histoire de Cliques


Rappel: dans un graphe, une clique est un ensemble de sommets qui sont tous reliés deux à deux- chaque paire
est reliée. Le problème Clique consiste à déterminer s’il existe dans un graphe donné une clique de cardinal égal
à un entier k donné. Le problème de décision Clique est donc défini par:
Entrée:
G = (S, A) - -un graphe
k - -un entier
Sortie: Oui, si il existe une clique de cardinal k, i.e. une partie C de S de cardinal k telle que toute paire
de sommets de S soit reliée par un arc de A, Non sinon.
Clique est connu NP-complet.
Soient les quatre problèmes suivants:
1000-Clique
Entrée: G = (S, A) –un graphe
Sortie: Oui, si il existe une clique de cardinal égal à 1000, Non sinon.
Demi-Ind
Entrée: G = (S, A) –un graphe
Sortie: Oui, si il existe un sous-ensemble indépendant de cardinal au moins |S|/2.
Double-Clique
Entrée:
G = (S, A) –un graphe
k - -un entier
Sortie: Oui, si il existe deux cliques distinctes de cardinal égal à k, Non sinon.

3
Presque-Clique
Entrée: G = (S, A) –un graphe.
Sortie: Oui, si il existe une clique de cardinal égal à |S| − 1 (|S| est le cardinal de S), Non sinon.
Q 1. Parmi ces quatre problèmes, 1000-Clique, Demi-Ind, Double-Clique, Presque-Clique, quels sont les problèmes
NP-durs, quels sont les problèmes P? Justifier.
n
• 1000-Clique est P: soit n le nombre de sommets: le nombre de sous-ensembles de cardinal 1000 est C1000 =
n! 1000
1000!(n−1000)! qui est inférieur à n donc poynomialement bornée par rapport à la taille de l’entrée qui est
supérieure à n; on peut facilement tous les générer (exercice: comment?); tester si un sous-ensemble est une clique
est polynomial ( même en O(1) ici puisque les sous-ensembles sont de staille fixe -1000). Donc l’algorithme suivant
est polynomial:

Pour chaque sous-ensemble C de cardinal 1000


si C est une clique retouner vrai
reotuner Faux

2000
ceci étant, cet algorithme n’est a priori pas praticable: par exemple si n=2000, C1000 est supérieur à 21000 , donc
supérieur à l’ordre de grandeur supposé d’atomes dans l’univers...
• Presque-Clique est P: Il y a n − 1 sous-ensembles de cardinal n − 1 et tester si un tel sous-ensemble est une clique
est en O(n2 ). Donc on obtient ici un algorithme en O(n3 ) qui est polynomial et plus raisonnable que le précédent.

Pour chaque sommet s


si S-s est une clique retouner vrai
reotuner Faux

• Demi-Ind est NP-dur.


On va réduire Independent en Demi-Ind, avec Independent connu NP-dur défini par: Entrée:
G = (S, A) - -un graphe
k - -un entier
Sortie: Oui, si il existe un sous-ensemble indépendant de cardinal k, i.e. une partie I de S de cardinal k telle
qu’aucun arc ne relie deux sommets de I ((I × I) ∩ A = ∅).
On va construire polynomialement à partir d’une instance d’Independent une instance équivalente de Idemi-Ind;
Soit donc (G = (S, A), k) une instance d’Independent et soit n le cardinal de S. On doit donc juste construire
G’=(S’,A’) tel que l’existence d’un ensemble indépendant de cardinal k dans G soit équivalente à l’existence d’un
ensemble indépendant de cardinal |S 0 |/2 dans G’. On construit G’ comme suit:

– Si 2k=n, G’=G. L’équivalence des deux problèmes est immédiate.


– Si 2k < n, on ajoute x = n − 2k sommets à S pour obtenir S’ qui sera donc de cardinal 2n-2k, et aucun
arc (A’=A). Si on a un ensemble indépendant de cardinal k dans G, alors en lui ajoutant les x nouveaux
sommets, on obtient un sous-ensemble indépendant dans G’ de cardinal x+k=n-k=|S’|/2. Si on a un sous-
ensemble indépendant dans G’ de cardinal |S’|/2, il contient au plus x sommets "nouveaux", donc au moins
n − k − (n − 2k) = k sommets de S qui forment un sous-ensemble indépendant de G.
– Si 2k > n, on ajoute x = 2k − n sommets à S pour obtenir S’ qui sera donc de cardinal 2k, et on relie chacun
de ces nouveaux sommets à tous les autres. Si on a un ensemble indépendant de cardinal k dans G, alors il
forme un sous-ensemble indépendant dans G’ de cardinal k=|S’|/2. Si on a un sous-ensemble indépendant
dans G’ de cardinal |S’|/2=k, il ne contient aucun sommet "nouveau" pusiqu’ils sont tous reliés aux autres
(on peut supposer wlog que k>1), donc ce sous-ensemble est un sous-ensemble indépendant de G de cardinal
k.

La construction est donc bien correcte et polynomiale.


• Double Clique est NP-dur. On peut facilement réduire Clique en Double-Clique. Il suffit pour cela de cloner le
graphe G.

Q 2. - 1 pt - Les quatre problèmes sont-ils N P ? Justifier.


Les deux problèmes P sont bien sûr N P puisquen P ⊂ N P .
Demi-Ind est un cas particulier de Independant , et est donc bien sûr NP: un certificat est juste un sous-ensemble de
sommets de cardinal §/2|, la vérification consiste juste à vérifier que c’est un sous-ensemble indépendant.
Pour Double-Clique, le certificat est juste deux sous-ensembles de cardinal k. La vérification consiste à vérifier que
ces deux sous-ensembles sont distincts et que ce sont bien des cliques.
4
Exercice 7 : Paquets logiciels
Préliminaire: Cet exercice est inspiré de la problématique d’installation des paquets logiciels et en particulier
d’une infime partie des travaux de L’Initiative pour la Recherche et l’Innovation sur le Logiciel Libre, l’IRILL:
c’est une version très simplifiée et schématique de la problématique: voir le site de l’IRILL, http://www.irill.org/.
On supposera dans l’exercice qu’un paquet est identifié par un numéro, un entier positif.
Le cadre général: Pour un paquet logiciel P on connait:

• l’ensemble des paquets avec qui il est en conflit, c.à.d. qui ne peuvent être installés en même temps que
lui.

• un ensemble de dépendances qui est un ensemble d’ensembles de paquets: si les dépendances de P


sont {E1 , . . . , Ek }, cela signifie que pour une installation réussie de P , il faut pour chaque i, qu’au moins
un paquet de Ei soit installé. Par exemple, si les dépendances sont {{P1 , P4 }, {P2 }, {P1 , P3 }, P1 , P2 ou
P4 , P2 , P3 suffisent pour installer le paquet, P4 , P2 ne suffisent pas.

Ces informations sur le paquet P sont incluses dans le paquet P . On supposera dans l’exercice qu’un paquet
est limité à ces informations: un paquet sera donc la donnée d’un triplet (Id, Conf, Dep) avec Id son identifiant,
Conf la donnée de l’ensemble des identifiants des paquets en conflit avec P et Dep l’ensemble des dépendances
de P . La taille d’un paquet est donc ici la taille de sa représentation.
Par exemple (2, {1, 7}, ({3, 4}, {5}) correspond au paquet de numéro 2, qui est en conflit avec les paquets 1
et 7 et qui nécessite d’une part le paquet 3 ou le paquet 4, d’autre part le paquet 5.
On supposera disposer des primitives sur les ensembles (appartenance d’un élément à un ensemble, inter-
section, union, complémentaire, ...).
On supposera pour simplifier que les conflits sont donnés explicitement de façon symétrique: si le paquet Q
se dit en conflit avec le paquet R, le paquet R se dit en conflit avec le paquet Q.
Une installation I est juste un ensemble de paquets. On dit qu’elle est correcte si elle respecte les
contraintes de conflit - elle ne contient pas deux paquets en conflit-, et de dépendance - pour tout paquet de I,
les contraintes de dépendances sont vérifiées: si les dépendances du paquet sont {E1 , . . . , Ek }, Ei ∩ I est non
vide pour tout i, 1 ≤ i ≤ k. On va étudier la complexité de différents problèmes liés à l’installation de paquets.
Q 1. Installation immédiate
Soit le problème suivant:
Entrée: un paquet P = (id, Conf, Dep) , une installation correcte I.
Sortie: Oui, Ssi P peut être installé directement, i.e. I ∪ P est-elle correcte. Non , sinon.
Montrer que le problème est P .
Q 2. Installation correcte
Soit le problème suivant:
Entrée: une installation I.
Sortie: Oui, Ssi I est correcte. Non , sinon.
Montrer que le problème est P .
Q 3. Installation de k paquets (problème pas trés réaliste)
Soit maintenant le problème de décision suivant k − Inst:
Entrée:
n, entier positif
P1 , . . . , Pn , n paquets.
k, entier , 0 ≤ k ≤ n
Sortie: Oui, Ssi on peut choisir k paquets distincts parmi P1 , ..., Pn qui forment une installation correcte.
Q 3.1. Montrer que le problème k − Inst est N P .
Q 3.2.
Montrer qu’Independent se réduit polynomialement dans le problème k − Inst. Qu’en déduire?
Q 4. Installation possible?
Soit maintenant le problème de décision P oss suivant:
Entrée: un ensemble de paquets disponibles Dispo, un paquet P de Dispo
Sortie: Oui, Ssi il existe une installation correcte de P , i.e. I ⊂ Dispo qui soit correcte et qui contienne P .

5
Q 4.1. Montrer que le problème P oss est N P .
Q 4.2. Supposons qu’il n’y ait aucun conflit, juste des dépendances. Quelle est la complexité de la restriction
du problème P oss à ce cas?
Q 4.3. Montrer qu’Independent se réduit polynomialement dans le problème P oss.
Qu’en déduire pour la complexité du problème P oss?
Q 5. Que pensez-vous de la complexité du problème DecProc si chaque processus utilise une seule ressource?
Le problème devient bien sûr polynomial 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 6. 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).

Vous aimerez peut-être aussi