2009

publicité
INF550
Promotion 2007
Conception et analyse d'algorithmes
Examen du mercredi 9 décembre 2009. 2 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. Arbre couvrant de poids minimum et contraction d'arêtes (6 pts)
On se donne un graphe G = (X, E) à n sommets et m arêtes chacune munie d'un
poids. L'objectif est de trouver un arbre couvrant de poids minimum. On rappelle qu'un
arbre couvrant est un ensemble d'arêtes T tel que le graphe (X, T ) soit connexe. Le poids
d'un arbre est la somme des poids des arêtes qui le constituent. On suppose dans cette
partie pour simplier que les arêtes ont des poids tous diérents.
1. Soit x un sommet de G et e = (x, y) une arête incidente à x de poids minimum parmi
les arêtes incidentes à x. Montrer qu'il existe un arbre couvrant de poids minimum
de G qui contient e.
2. Autour de chaque sommet de G on sélectionne l'arête de poids minimum. Soit F
l'ensemble des arêtes ainsi sélectionnées. Montrez que F contient au moins n/2 arêtes
et qu'il existe un arbre couvrant de poids minimum de G contenant toutes ces arêtes.
3. On remarque la propriété suivante :
Soit F un ensemble d'arêtes tel qu'il existe un arbre de poids minimum de
G les contenant. Soit G/F le graphe obtenu à partir de G en contractant les
arêtes de F : les sommets de G/F sont les composantes connexes du graphe
(X, F ) et les arêtes de G/F sont les arêtes de poids minimum joignant dans
G des sommets de composantes connexes diérentes du graphe (X, F ).
Alors l'union de F et des arêtes d'un arbre couvrant de poids minimum de
G/F est un arbre couvrant de poids minimum de G.
Déduire de cette propriété et de la question précédente un algorithme pour construire
un arbre couvrant minimum de G en temps O(m log n). Justier la complexité de
votre algorithme.
II. Commentaires sportifs et algorithmes de ot (7 pts)
Nous souhaitons faire des commentaires sur un championnat en cours de déroulement
auquel participent n équipes. Le principe du championnat est que chaque équipe rencontre
toutes les autres un certain nombre de fois et marque 1 point par victoire (pas de match
nul possible). À la n du championnat l'équipe ayant le plus de points gagne.
À un moment donné du championnat l'information suivante est disponible :
le nombre pi de points de chaque équipe
1
le nombre de rencontres ai,j encore à venir entre l'équipe i et l'équipe j .
Notre but est de déterminer les équipes qui peuvent encore prétendre à la victoire à ce
moment du championnat.
1. Considérons le cas suivant, avant le dernier round d'un championnat en 6 rounds :
les équipes
points
1.
2.
3.
4.
10
10
7
3
rouges
bleus
blancs
vert
parties
1. 2.
1
1
1 1
1 1
à jouer
3. 4.
1 1
1 1
1
1
Vérier que les verts ne peuvent plus gagner le championnat.
P
Notons ak = i6=k ak,i le nombre de parties restantes pour l'équipe k . Comment savoir
si l'équipe k peut encore gagner : elle aura pk + ak points à la n si elle gagne tous ses
matchs, et elle peut gagner le championnat si et seulement si il existe un déroulement des
autres parties tel que toutes les autres équipes marquent moins de pk + ak points.
2. Utiliser la caractérisation précédente pour donner un algorithme pour décider si
l'équipe numéro k peut encore gagner le championnat étant donnés les pi et les ai,j .
On pourra utiliser un problème de ot maximum dans un graphe ayant pour ensemble
de sommets
X = {s, t} ∪ {i | 1 ≤ i ≤ n, i 6= k} ∪ {(i, j) | 1 ≤ i < j ≤ n, i 6= k, j 6= k}
et des arêtes de capacités bien choisies.
3. Donner un argument direct pour montrer que dans l'exemple précédent les blancs ne
peuvent plus terminer premiers, même à égalité avec d'autres équipes.
4. Étant donné un sous-ensemble d'équipe R ⊂ {1, 2, . . . , n} \ {k}, montrer que le total
des scores des équipes de R à la n du championnat sera au moins
X
1 X
pi +
ai,j .
m(R) =
2
i∈R
i,j∈R
5. En déduire que l'existence d'un sous-ensemble R d'équipes ne contenant pas k et
tel que m(R)/|R| > pk + ak sut à assurer que l'équipe k ne puisse plus gagner le
championnat.
6. Montrer que cette condition est nécessaire : si l'équipe k ne peut plus gagner le
championnat, c'est qu'il existe un sous-ensemble R ne contenant pas k tel que
m(R)/|R| > pk + ak . On pourra utiliser le théorème max-ow / min-cut pour
construire le R recherché.
III. Réseau avec relais, NP-complétude, approximation (7 pts)
Soit un graphe G = (X, E) et un sous-ensemble S de sommets. On cherche à construire
dans G un réseau le plus petit possible qui connecte les sommets de S entre eux, en
utilisant éventuellement certains autres sommets de G comme relais. Plus formellement
on considère le problème suivant :
2
Réseau avec relais
Donnée :
Un graphe G = (X, E), un sous-ensemble S ⊂ X de sommets et un
entier k .
Problème : Trouver un sous-ensemble T d'au plus k arêtes tel que pour tout
x, y dans S il existe un chemin de x à y n'utilisant que des arêtes de T .
A. NP-complétude du problème Réseau
avec relais.
Nous allons montrer que ce problème réseau avec relais est NP-complet. Pour cela
nous considérons une variante du problème de recouvrement d'ensembles vu en cours :
Couverture par triplets
Donnée :
Un ensemble Y de cardinal 3n et une famille C = {C1 , . . . , Cm } de
triplets non ordonnés d'éléments de Y : pour tout i, Ci ⊂ Y et |Ci | = 3.
Problème : Existe-t-il un sous-ensemble C 0 de C qui forme une partition de
Y : les éléments de C 0 sont disjoints et leur union est Y ?
Nous admettrons que la variante Couverture par triplets est encore NP-complète.
1. Montrer que le problème Réseau avec relais est dans la classe NP.
2. Montrer que le problème Réseau avec relais est NP-complet.
Comme indication, je vous propose deux constructions : l'une des deux peut être
utilisée pour répondre à la question, l'autre pas ; à vous de voir laquelle, ou d'inventer
votre propre réduction.
Étant donné un graphe G = (X, E), un sous-ensemble S de X et un entier k ,
on construit une instance de couverture par triplets en prenant comme
ensemble Y = S1 ∪ S2 ∪ S3 , où les Si sont des copies disjointes de S et comme
famille de triplets C les (x, y, z) de S1 × S2 × S3 tels qu'il existe dans G un arbre
de taille au plus b3k/|Y |c contenant les sommets de G associés à x, y et z .
Étant donné un ensemble Y avec |Y | = 3n et une collection C de triplets de Y
on construit une instance de Réseau avec relais en prenant comme ensemble
de sommets X = {x0 } ∪ C ∪ Y , comme ensemble d'arêtes E = {(x0 , c) | c ∈
C} ∪ {(c, y) | c ∈ C, y ∈ Y }, comme ensemble de sommets à relier S = {x0 } ∪ Y
et comme taille de réseau à ne pas dépasser k = 4n.
B. Un algorithme d'approximation pour Réseau
avec relais.
Reprenons un graphe G et un sous ensemble S des sommets. Soit GS le graphe complet
pondéré sur S avec, pour tout x, y dans S , le poids de l'arête (x, y) égal à la longueur
d'un plus court chemin entre x et y dans le graphe G.
1. Montrer que le poids d'un arbre couvrant de poids minimum de GS est au plus deux
fois la taille d'un réseau de taille minimale connectant S dans G.
2. Donner un algorithme approché à un facteur 2 pour le problème Réseau avec
relais. Quelle est la complexité de votre algorithme ?
3. Question subsidiaire (si vous avez fait tout le reste) : montrez la NP-complétude
de couverture par triplets.
3
Téléchargement