Conception et analyse d`algorithmes I. De la di culté de trouver des

publicité
INF550
Promotion 2008
Conception et analyse d'algorithmes
Examen du mercredi 8 décembre 2010. 3 heures
Documents autorisés : poly, transparents du cours, énoncés de PC
Le barême est indicatif. On vous demande d'accorder une attention particulière à une
rédaction soignée, qui sera un critère important dans l'évaluation.
I. De la diculté de trouver des gens gentils (4 pts)
Soit G un graphe d'ensemble de sommets X et d'ensemble d'arêtes A. Étant donné un
sous-ensemble de sommet S ⊂ X , on dénit l'ensemble des arêtes induites AS = {{u, v} ∈
A | u ∈ S, v ∈ S} et l'excès de S par e(S) = |AS | − |S|. Le problème Excès consiste,
étant donné G et k > 0, à décider s'il existe un sous-ensemble S d'excès inférieur ou égal
à −k dans G.
On rappelle que le problème Stable, consistant à décider s'il existe un ensemble S de
k sommets indépendants (i.e. tel que AS = ∅) dans G est NP-complet.
1. Montrer que l'excès d'un graphe connexe est supérieur ou égal à -1. Donner plus
généralement une borne inférieure à l'excès d'un graphe formé de k composantes
connexes (rappel : deux sommets u et v sont dans la même composante connexe de
G s'il existe un chemin allant de u à v dans G).
2. Montrer que le problème
On considère le problème
Excès
est NP-complet.
BonneAmbiance
Donnée :
suivant :
Un ensemble X d'utilisateurs d'un réseau social ; pour chaque utilisateur un
ensemble d'amis et un ensemble d'ennemis (les relations être amis et être ennemis
sont supposées symétriques). Un entier k > 0.
Problème :
Existe-t-il un groupe d'utilisateurs U ⊂ X tel que le nombre de paires
d'utilisateurs de U qui sont amis moins le nombre de paires d'utilisateurs de U qui
sont ennemis est au moins égal à k ?
3. Montrer que le problème BonneAmbiance est NP-complet.
(Indication : Il pourra être utile de considérer un utilisateur ami de tous les membres
du réseau.)
II. Des ots pour un temps d'évacuation (4 pts)
On modélise un bâtiment par un graphe : les sommets sont les pièces et les arêtes les
couloirs entre ces pièces. Chaque couloir est décrit par une capacité entière, qui indique
combien de personnes peuvent emprunter ce couloir simultanément (à chaque unité de
temps).
1
1. On fait dans un premier temps l'hypothèse qu'il faut une unité de temps pour traverser un couloir (traverser une pièce est instantané). On suppose de plus que tous
les occupants du batiment sont dans une même pièce au départ et que la sortie se
fait à partir d'une pièce unique. Le problème est de décider si on peut évacuer tout
le monde en t unités de temps ou moins.
Modéliser ce problème à l'aide de problèmes de ots dans un graphe bien choisi et
en déduire un algorithme pour trouver le temps d'évacuation. Donner une borne sur
la complexité de votre algorithme dans le pire cas.
(Indication : On pourra commencer par se demander s'il est possible d'évacuer le
batiment en 1 unité de temps ; puis en 2 unités de temps...)
2. Étendre l'algorithme au cas où les personnes sont dans des pièces diérentes et où il
y a plusieurs sorties.
3. Étendre l'algorithme au cas où plusieurs unités de temps peuvent être nécessaire
pour traverser un couloir.
4. Justier (à moins que ce ne soit déjà fait) le fait qu'il n'ait pas été nécessaire dans
la modélisation de la capacité d'un couloir de tenir compte de la possibilité que des
personnes l'empruntent simultanément dans des directions opposées.
III. Algorithme approché pour la couverture par sommets (4 pts)
On rappelle que le problème CouvrantMin(G) consiste à trouver dans un graphe G
un ensemble couvrant de cardinal minimum où un ensemble S de sommet est couvrant si
chaque arête de G a au moins une de ses extrémités dans S .
On suppose dans un premier temps que le graphe est connexe et on considère l'algorithme suivant : choisir un sommet x0 arbitraire, construire un arbre couvrant en profondeur de G à partir de x0 et renvoyer l'ensemble des sommets qui ne sont pas des feuilles
(i.e. qui ont au moins un descendant dans l'arbre).
On rappelle qu'un arbre couvrant en profondeur de racine x0 s'obtient comme ensemble
des arêtes marquées par l'appel DFS(x0 ) où DFS est la procédure de parcours récursif
suivante :
DFS(x) :
tant que x a un voisin y encore non visité
faire { marquer l'arête {x, y} et faire DFS(y )}
1. Donner la complexité de cet algorithme en fonction des nombres n de sommets et/ou
m d'arêtes du graphe.
2. Montrer que l'ensemble obtenu est un ensemble couvrant de G.
3. Quel est le facteur d'approximation de la solution obtenue. (Indication 1 : On pourra
montrer que s'il existe un couplage à k sommets dans G (i.e. un ensemble de k
arêtes disjointes) alors tout ensemble couvrant de G contient au moins k sommets.
Indication 2 : colorier les sommets internes de l'arbre couvrant alternativement en
deux couleurs et utiliser la couleur la plus fréquente pour construire un couplage ).
4. Adapter l'algorithme au cas où le graphe n'est plus nécessairement connexe. Quel est
alors le facteur d'approximation obtenu ?
2
IV. Programmation linéaire et approximation pour un ordonnancement (4 pts)
On considère un problème d'ordonnancement sur une unique machine avec des contraintes
de précédence et des coûts associés à chaque tâche proportionnellement à leur date de n
d'exécution.
Plus précisément on se donne un ensemble de tâches numérotées {1, . . . , n} et pour
chaque tâche j , sa durée dj , l'ensemble de ses prédécesseurs Pj ⊂ {1, . . . , n} et son facteur
de coût αj : si la tâche j termine à l'instant t, elle coûte αj t. On suppose les di entiers et
on travaille en temps discret.
Le but est d'ordonnancer les tâches de façon à minimiser la somme des coûts d'exécution. An de modéliser le problème par un programme linéaire en entiers, on se donne
une variable xj,t ∈ {0, 1} pour chaque tâche j et chaque instant t, qui servira à indiquer
si la tâche j termine exactement au temps t.
1. Compléter la description du programme linéaire modélisant le problème. En particulier il faudra s'assurer que :
chaque tâche termine à un temps bien déni,
qu'une tâche ne commence pas avant que ses prédécesseurs soient terminées,
qu'au bout d'un temps t, au plus t unités de temps ont été utilisées pour eectuer
des tâches.
Enn il faudra préciser quelle est la fonctionnelle linéaire à minimiser.
On relache maintenant la contrainte de variables entières en la remplaçant par 0 ≤ xj,t ≤ 1.
Notons x̂j,t un optimum du problème linéaire ainsi obtenu : on peut interpréter x̂j,t comme
une fraction de tâche j exécutée à l'instant tP
.
On associe à la tâche j la quantité Tj = t tx̂j,t qui moyenne les temps de n d'exécution par
P fraction de la tâche, et le temps de demi-exécution θj qui est le plus grand θ
tel que 0≤t<θ x̂j,t ≤ 12 .
2. Montrer que Tj > θj /2.
3. Montrer que si on ordonne les tâches par θj croissants, une tâche ne s'exécute jamais
avant un de ses prédécesseurs.
4. Montrer de plus que dans cet ordre, la tâche j se termine au plus tard au temps 4Tj .
5. En déduire un algorithme d'approximation pour le problème d'ordonnancement d'origine et donner son facteur d'approximation.
V. Générateurs minimaux en temps polynomial paramétrique (4 pts)
Le problème EnsembleGénérateur est le suivant : étant donnée une collection
C = (C1 , . . . , Cm ) de parties deux à deux distinctes de {1, . . . , n}, existe-t-il k parties
(G1 , . . . , Gk ) de {1, . . . , n} (éventuellement distinctes des Ci ) qui engendrent les Ci par
union : chaque Ci doit pouvoir s'écrire comme union d'un sous-ensemble des Gj .
1. Montrer que si k ≥ n la réponse est toujours positive.
2. Donner un exemple de collection C avec m = n tel que la réponse soit négative pour
k < n.
3. Si la réponse est positive donner une borne supérieure sur m en fonction de k .
3
Le probleme EnsembleGénérateur est en fait NP-complet (on ne demande pas de le
montrer). Dans le reste de l'exercice on veut montrer que le problème est polynomial en
n et m à k xé (FPT).
4. Donner une condition susante sur un entier x pour qu'on puisse le supprimer de
tous les Ci où il apparait sans changer la réponse au problème posé.
5. Montrer comment construire à partir d'une instance (C, k) du problème EnsembleS 0
k
Générateur une autre instance (C 0 , k 0 ) portant sur au plus 22 éléments (|
Ci | <
k
22 ) et telle que la réponse à EnsembleGénérateur(C, k) est positive si et seulement si la réponse à EnsembleGénérateur(C 0 , k 0 ) l'est.
6. Déduire de la question précédente un algorithme pour le problème EnsembleGénérateur(C, k) de complexité f (k) + P (C) où P (C) est une fonction au plus polynomiale de la taille de C et f une fonction de k qu'on précisera toutes les deux.
4
Téléchargement