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