Vous êtes sur la page 1sur 8

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 6
6 5 10
14
8 10
8
15 A 6 10 B 8

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 8, 6, 5, 6 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) = 8, d(C) = 6, d(D) =
5, d(G) = 6 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)
= 8, d(C) = 6, d(E) = 11, d(G) = 6 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) = 6,
d’où A = {B, E, G, H}, d(B) = 8, d(E) = 11, d(G) = 6 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) = 6, d’où A = {B, E, F, H}, d(B) = 8,
d(E) = 11, d(F) = 18 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) = 8, d’où
A = {E, F, H}, d(E) = 11, d(F) = 16 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) =
16 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) = 16
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) = 16 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} 8, A 6, A 5, A ∞ ∞ 6, A 15, A
V = {A, D} 8, A 6, A - 11, D ∞ 6, A 15, A
V = {A, C, D} 8, A - - 11, D ∞ 6, A 14, C
V = {A, C, D, G} 8, A - - 11, D 18, G - 14, C
V = {A, B, C, D, G} - - - 11, D 16, B - 14, C
V = {A, B, C, D, E, G} - - - - 16, B - 14, C
V = {A, B, C, D, E, G, H} - - - - 16, B - -
V = {A, B, C, D, E, F, G, 8, A 6, A 5, A 11, D 16, B 6, A 14, C
H}

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 (6) D (5) E (11)

6
6 5

8
8
A(0) 6 B (8) 8

H (14) G (6) F (16)

(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)

6 10 14

8
8
A (8) B (0) 8
10

H (22) 12 G (10) F (8)

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 à 66 / 7, alors qu’à
partir de B, le coût moyen est de 86 / 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 G1, G2, … et Gk ses composantes connexes, elles sont connexes et sans cycle,
donc, d’après (a) ⇒ (b), mi = ni – 1 pour chacune d’entre elles. D’où :

k k
n "1 = m = # mi = # ( ni " 1 ) = n " k
i=1 i=1

D’où k = 1, autrement dit : G est connexe

(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’ = vM – v où vM est une constante strictement supérieure à toute valuation v(x, y)

Dans notre exemple, nous pouvons prendre par exemple vM = 20, d’où le graphe G’ :

C D E

15 12
14 15 10
6
12 10
12
5 A 14 10 B 12

8 8
H G F

Avec cette nouvelle valuation v’, pour tout arbre recouvrant A de G, on a :

v' (A) = # v' (a) = (n $ 1)v M $ # v(a) = (n $ 1)v M $ v(A)


a" A a" A

car tout arbre recouvrant de G a exactement n – 1 arêtes

Soit!A0 l’Arbre Recouvrant Minimal trouvé avec v’ et A, un arbre recouvrant quelconque de G, alors :

v’(A0) = (n – 1)vM – v(A0) ≤ v’(A) = (n – 1)vM – v(A)

Donc : v(A0) ≥ v(A), ce qui démontre que l’arbre trouvé, A0, 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 6 10

5 A 10 B

H 8 G 8 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 81 :

C D E

10
8 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

6
(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 (6) 5 D (11) 6 E (17)

6
8
8
A (0) B (8)
6 8

H (14) G (6) F (16)

Le coût moyen d’un plus court chemin est maintenant de 78 / 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 (6) D (5) E (11)

6
6 5 10

A(0) 6 B (15)

H (14) G (6) 12 F (18)

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) 8
10

H (22) 12 G (10) F (8)

Le coût moyen d’un plus court chemin est maintenant de 94 / 7

Enfin, aucun des deux Arbres Recouvrants Maximaux solutions n’utilisent l’arête AB, ils restent donc les
mêmes

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