Corrigé TD N 2 GESTION D AUTOROUTES (1) Le graphe G = (X, E, v) correspondant au réseau autoroutier, où les sommets sont les villes et deux villes sont reliées s il existe une autoroute entre ces deux villes, est donné donc par sa matrice d adjacence, où : M(i, j) = v(i, j) = coût du trajet allant de i à j Cette matrice est symétrique, le graphe est donc non orienté Un graphe simple non orienté est dit planaire si et seulement s il admet une représentation dans le plan, où les sommets sont des points et les arêtes sont des segments de droite, telle que deux segments ne s intersectent pas (en dehors éventuellement de leurs extrémités lorsqu ils sont adjacents). On parle alors de planarité. Pour quelques résultats dans ce domaine très riche voir le poly Le graphe de l exercice est planaire car on peut le représenter de la façon suivante : C D E 5 5 10 14 10 15 A 10 B H 12 G 12 F (2) Le problème consiste à calculer les itinéraires les plus économique à partir de la ville A, c est donc un problème de plus courts chemins d un sommet vers tous les autres, le critère à minimiser est ici le coût monétaire des chemins. Pour cela on peut appliquer l algorithme de DIJKSTRA, il est applicable car toutes les valuations sont positives À chaque étape, le graphe est partitionné en trois sous-ensembles de sommets : les sommets visités, V, sommets x pour lesquels on connaît définitivement la plus courte distance de A à x, les sommets atteints, A, sommets non visités, voisins des précédents, pour lesquels on a une estimation de la distance, et les autres, c est-àdire ceux de X (V A), pour lesquels la distance est infinie Initialement V contient A, A contient ses voisins, B, C, D, G et H, leurs distances estimées correspondent aux valuations des arêtes correspondantes, soit,, 5, et 15, et les autres sommets ont une distance infinie L étape courante de l algorithme consiste simplement à prendre dans A un des sommets x dont la distance estimée est la plus petite, ce sommet devient visité, ses voisins non visités ni atteints deviennent atteints. Leurs distances estimées est celle de x plus la valuation de l arête et ses voisins déjà atteints peuvent voir leurs distances estimées diminuer et leurs prédécesseurs changer, voir suite L algorithme se termine quand tous les sommets sont visités 1
Etape initiale : V = {A}, d(a) = 0, A = {B, C, D, G, H} (ce sont les voisins de A) avec d(b) =, d(c) =, d(d) = 5, d(g) = et d(h) = 15 et p(b) = d(c) = p(d) = p(g) = p(h) = A, tous les autres sommets ont une distance infinie et leurs prédécesseurs sont à 0 Première étape : D est choisi donc V = {A, D} et sa distance (définitive) est d(d) = 5, A = {B, C, E, G, H}, d(b) =, d(c) =, d(e) = 11, d(g) = et d(h) = 15, p(b) = p(c) = p(g) = p(h) = A et p(e) = D, les autres sommets ont un distance infinie et sont sans prédécesseur. Dans la suite, nous ne mentionnerons plus ces sommets, seuls seront mentionnés les sommets de V et A Deuxième étape : C est choisi, G aurait pu être choisi à sa place, donc V = {A, C, D} et sa distance est d(c) =, d où A = {B, E, G, H}, d(b) =, d(e) = 11, d(g) = et d(h) = 14, p(b) = p(g) = A, p(e) = D et p(h) = C Troisième étape : G est choisi donc V = {A, C, D, G} et sa distance est d(g) =, d où A = {B, E, F, H}, d(b) =, d(e) = 11, d(f) = 1 et d(h) = 14, p(b) = A, p(e) = D, p(f) = G et p(h) = C Quatrième étape : B est choisi, on aurait pu choisir C, donc V = {A, B, C, D, G} et sa distance est d(b) =, d où A = {E, F, H}, d(e) = 11, d(f) = 1 et d(h) = 14, p(e) = D, p(f) = B et p(h) = C Cinquième étape : E est choisi donc V = {A, B, C, D, E, G} et sa distance est d(e) = 11, d où A = {F, H}, d(f) = 1 et d(h) = 14, p(f) = B et p(h) = C Sixième étape : H est choisi, donc V = {A, B, C, D, E, G, H} et sa distance est d(h) = 14, d où A = {F}, d(f) = 1 et p(f) = B Septième et dernière étape (car à l issue de cette étape tous les sommets sont visités) : F est choisi donc V = {A, B, C, D, E, F, G, H} sa distance est d(f) = 1 et p(f) = B On peut aussi représenter, de façon assez pertinente, les différentes étapes par un tableau : B C D E F G H V = {A}, A, A 5, A, A 15, A V = {A, D}, A, A - 11, D, A 15, A V = {A, C, D}, A - - 11, D, A 14, C V = {A, C, D, G}, A - - 11, D 1, G - 14, C V = {A, B, C, D, G} - - - 11, D 1, B - 14, C V = {A, B, C, D, E, G} - - - - 1, B - 14, C V = {A, B, C, D, E, G, H} - - - - 1, B - - V = {A, B, C, D, E, F, G, H}, A, A 5, A 11, D 1, B, A 14, C La première colonne contient l évolution de l ensemble des sommets visités. Dans chaque case figurent la distance de A au sommet concerné (qu elle soit finie ou infinie) et le précédent, quand il existe (soit de façon définitive soit relativement à la distance estimée) dans le plus court chemin de A à ce sommet. Lorsque qu un couple (distance, précédent) est définitif il est affiché en gras 2
Le graphe partiel correspondant aux plus courts chemins est obtenu en utilisant le tableau des prédécesseurs, cela donne le graphe suivant : C () D (5) E (11) 5 A(0) B () H (14) G () F (1) (3) Si l agence envisage de s installer en B, quels sont alors les meilleurs itinéraires aux autres villes? Il n est pas nécessaire de tout recalculer : entre A et B le plus court chemin est (A, B), et comme le plus court chemin de A à F est (A, B, F) alors le plus courts chemins de B à F est (B, F), d après le principe d optimalité Il reste donc à calculer les plus courts chemins de B à C, D, E, G et H En appliquant l algorithme de DIJKSTRA à partir de B, nous obtenons facilement les plus courts chemins (B, D), (B, G) et (B, E), qui sont adjacents à B, puis (B, A, C) et (B, G, H), ou (B, A, C, H) D où le nouveau graphe partiel des plus courts chemins à partir de B : C (14) D (10) E (14) 10 14 A () B (0) 10 H (22) 12 G (10) F () Il s agit maintenant de comparer les itinéraires obtenus d une part à partir de A et d autre part à partir de B Si l on est en A, le coût moyen d un itinéraire pour aller à l une des autres villes est égal à / 7, alors qu à partir de B, le coût moyen est de / 7. Pour les «touristes», il est plus économique de rester en A, pour l agence il est sans doute plus «rentable» de s installer en B 3
(4) Il faut construire un graphe partiel du réseau autoroutier, autrement dit un graphe obtenu à partir du graphe de départ en supprimant certaines arêtes, qui permette d atteindre toute ville à partir de toute autre ville et qui soit à la fois minimal en nombre de liaisons et le plus rentable possible pour la société gérant le réseau. La structure cherchée correspond donc à un Arbre Recouvrant, car connexe et minimal en nombre d arêtes. Il faut aussi que celui-ci soit de rentabilité maximale, il correspond donc un Arbre Recouvrant de coût Maximal Rappelons quelques propriétés caractérisant les Arbres, c est-à-dire les graphes simples non orientés connexes et sans cycle (voir les polycopiés «Graphes» et «Arbre Recouvrant Minimal») : Théorème Si G = (X, E) est un graphe simple non orienté ayant au moins deux sommets alors les propriétés suivantes sont équivalentes : (a) G est un arbre (ie connexe sans cycle) (b) G est sans cycle et m = n 1 (c) G est connexe et m = n 1 (d) G est sans cycle et l ajout d une arête entre deux sommets quelconque créé exactement un cycle (e) G est connexe et la suppression d une arête quelconque le déconnecte (f) Dans G tout couple de sommets est relié par une chaîne unique Précisons que l ajout (resp. la suppression) d une arête entre deux sommets x et y consiste uniquement à rajouter (resp. supprimer) la liaison entre ces sommets (pas de sommet ajouté ni supprimé) Ci-dessous une preuve possible de ce Théorème Tout d abord, une propriété utile : un arbre a toujours au moins deux feuilles Considérons une chaîne élémentaire (sans répétition de sommets) maximale, c est-à-dire qu on ne peut pas prolonger, il en existe au moins une car le graphe est fini, alors ses deux extrémités sont des feuilles sinon elles auraient chacune un autre voisin dans la chaîne, créant ainsi au moins un cycle (a) (b) Par récurrence sur n C est vrai si n = 2, 3, Supposons la propriété vraie jusqu à n 1 (n 3). Soit G un graphe connexe sans cycle, alors G a au moins un sommet pendant, x. Donc G x est connexe et sans cycle, et a donc (hypothèse de récurrence) n 2 arêtes. G a donc n 1 arêtes (b) (c) Si G n est pas connexe soient G 1, G 2, et G k ses composantes connexes, elles sont connexes et sans cycle, donc, d après (a) (b), m i = n i 1 pour chacune d entre elles. D où : D où k = 1, autrement dit : G est connexe k k n " 1 = m = # m i = # ( n i " 1 ) = n " k i = 1 i = 1 (c) (d) G est sans cycle sinon par suppressions successives d arêtes on crée un graphe partiel G de qui est connexe (trivialement la suppression de n importe quelle arête d un cycle ne déconnecte pas le graphe) et sans cycle ayant m < n 1 arêtes, ce qui est impossible d après (a) (b) Si l ajout d une arête ne crée pas de cycle, on obtient un graphe connexe sans cycle ayant n arêtes, ce qui est impossible d après (a) (b), ce cycle créé est nécessairement unique sinon il en existait déjà un dans G, impossible 4
(d) (e) G est connexe car si l ajout d une arête quelconque xy crée un cycle cela signifie que x et y était déjà connectés dans G. De même si la suppression d une arête xy ne déconnecte pas G c est qu il existe une chaîne C reliant x à y dans G xy, donc C + xy est un cycle de G : impossible par hypothèse (e) (f) Soient x et y deux sommets quelconques de G. S il existe deux chaînes distinctes reliant x et y dans G elles diffèrent au moins par un sommet donc par deux arêtes, la suppression de l une d entre elles ne déconnecte donc pas G (f) (a) Par hypothèse G est connexe et s il G contenait un cycle il existerait deux chaînes distinctes reliant deux sommets de G Revenons à notre problème Nous pouvons utiliser soit l algorithme de KRUSKAL soit l algorithme de PRIM, qui permettent de construire un Arbre Recouvrant de coût Minimal. En effet, pour obtenir un Arbre Recouvrant de valuation Maximale, il suffit, par exemple, de calculer un Arbre Recouvrant de valuation Minimale en considérant une nouvelle valuation v = v M v où v M est une constante strictement supérieure à toute valuation v(x, y) Dans notre exemple, nous pouvons prendre par exemple v M = 20, d où le graphe G : C D E 15 12 14 15 10 12 10 12 5 A 14 10 B 12 H G F Avec cette nouvelle valuation v, pour tout arbre recouvrant A de G, on a : v' (A) = # v' (a) = (n $1)vM $ # v(a) = (n $1)vM $ v(a) a" A a" A car tout arbre recouvrant de G a exactement n 1 arêtes Soit A 0 l Arbre Recouvrant Minimal trouvé avec v et A, un arbre recouvrant quelconque de G, alors : v (A 0 ) = (n 1)v M v(a 0 ) v (A) = (n 1)v M v(a) Donc : v(a 0 ) v(a), ce qui démontre que l arbre trouvé, A 0, est bien un Arbre Recouvrant Maximal Détaillons les algorithmes sur le graphe G 5
L algorithme de KRUSKAL considère les arêtes de G dans l ordre croissant des coûts, donc dans l ordre : AH, BE, FG, GH, BD, BG, EF, AB, BF, CH, DE, AC, AG et AD, en prenant, à coût égal, l ordre lexicographique Une arête n est retenue que si elle ne forme pas de cycle avec celles déjà retenues. L algorithme se termine dès que n 1 arêtes sont obtenues Les arêtes retenues sont donc : AH, BE, FG, GH, BD, BG et CH. Les arêtes EF, AB et BF sont rejetées car elles forment respectivement les cycles (B, E, F, G, B), (A, B, G, H, A) et (B, F, G, B) Remarquons que EF aurait pu être choisie à la place de BG L algorithme de PRIM, partant d un sommet initial, construit l arbre par voisinage en stockant, à chaque étape, l arête de coût minimal reliant l arbre en construction avec le reste du graphe. Il se termine lorsque tous les sommets sont atteints Dans notre cas, en partant du sommet A, nous obtenons successivement les arêtes AH, HG, GF, GB, BE, BD et HC. Remarquons, là aussi, qu au lieu de GB, on aurait pu choisir FE, de même coût, 10 Question : appliquer à nouveau l algorithme en partant d un autre sommet que A Nous obtenons alors l arbre recouvrant minimal : C D E 10 12 10 5 A 10 B H G F Il y a donc deux solutions possibles : soit avec BG, soit avec EF (arêtes en pointillé) L Arbre Recouvrant Maximal cherché est donc l un des deux arbres possibles, de coût 1 : C D E 10 14 10 15 A 10 B H 12 G 12 F Nous pouvons remarquer que l algorithme obtenu correspond tout simplement à appliquer l algorithme de KRUSKAL, ou de PRIM, sur le graphe initial en prenant à chaque étape l arête de plus grand coût parmi les arêtes possibles Remarquons aussi que l on aurait pu prendre des valuations de signe opposé, c est-à-dire v = - v
(5) Si la liaison AD n est plus utilisable alors, pour la question (2), seuls les plus courts chemins de A à D et E sont concernés, ce sont en effet les seuls utilisant l arête AD. Il faut alors reprendre l algorithme de DIJKSTRA à partir de A et recalculer ces chemins. Nous trouvons facilement (A, C, D), de longueur 11, pour D et (A, C, D, E), de longueur 17, pour E. D où le nouveau graphe partiel des plus courts chemins : C () 5 D (11) E (17) A (0) B () H (14) G () F (1) Le coût moyen d un plus court chemin est maintenant de 7 / 7 Pour la question (3), le graphe partiel des plus courts chemins partant de B reste le même car l arête AD n est pas utilisée Enfin, aucun des deux Arbres Recouvrants Maximaux solutions n utilisent l arête AD, ils restent donc les mêmes eux aussi Pour la question (2), si la liaison AB n est pas utilisable alors les plus courts chemins à modifier seront uniquement ceux de A à B et F, car ce sont les seuls à utiliser AB. Nous obtenons facilement : C () D (5) E (11) 5 10 A(0) B (15) H (14) G () 12 F (1) Le coût moyen d un plus court chemin est maintenant de 75 / 7 7
Pour la question (3), il faut calculer à nouveau les plus courts chemins de B à A et C, nous obtenons : C (15) 5 D (10) E (14) 5 10 14 A (15) B (0) 10 H (22) 12 G (10) F () Le coût moyen d un plus court chemin est maintenant de 94 / 7 mêmes Enfin, aucun des deux Arbres Recouvrants Maximaux solutions n utilisent l arête AB, ils restent donc les Si AH n est pas utilisable, les solutions restent les mêmes pour (2) et (3) car AH n y apparaît pas. Par contre, pour la question (4), le sommet A se retrouve isolé, il suffit alors de le relier au reste du graphe par l arête AB qui est l arête de coût minimal dans G, c est-à-dire de coût maximal dans G, adjacente à A