3. Graphes : problèmes de chemins |
Eric Sopena, Professeur au département Informatique
de l'IUT Bordeaux 1 Bordeaux, mars 2002 Parcourir le cahier |
Un tournoi est un graphe orienté tel que toute paire de sommets
est reliée par un arc, dans un sens ou dans l’autre (mais pas dans les deux
sens).
¨Pourquoi, selon vous, appelle-t-on
de tels graphes des tournois ?
¨Montrez que si un tournoi contient
un circuit de longueur k, alors il contient également des circuits de
longueur k’, pour tout k’ < k (une « preuve » à l’aide
d’un dessin suffit…).
¨Dessinez un tournoi à 6 sommets ne
possédant pas de circuit de longueur 4.
Un robot se promène sur le graphe ci-contre. Partant d’un sommet quelconque s, appelé sommet de stockage, il doit déposer un cube sur chacun des autres sommets. Il possède suffisamment de cubes sur le sommet de stockage, mais ne peut transporter qu’un cube à la fois (il doit donc repasser par le sommet de stockage avant de livrer un autre cube). Calculer, pour chacun des sommets du graphe, le trajet minimum que doit parcourir le robot si ce sommet est sommet de stockage.
Quel est le « meilleur » sommet de stockage ?
Considérons le graphe ci-contre. |
|
Construire le graphe orienté dont les sommets sont les entiers compris
entre 1 et 24 et dont les arcs relient x à y lorsque x
divise y. De plus, les arcs sont valués par le quotient y/x (ainsi,
l’arc allant de 3 vers 15 a la valeur 5).
¨Comment reconnaît-on dans ce graphe
un nombre premier ?
¨Comment retrouver dans ce graphe la
décomposition d’un nombre en facteurs premiers ?
Remplir le tableau ci-dessous qui, pour le graphe valué ci-contre, donne la valeur du plus court chemin d’un sommet à un autre.
|
|
Exécutez l’algorithme de Dijkstra sur le graphe précédent, à partir du sommet C, puis à partir du sommet F.
La compagnie Europ’Air dessert différentes villes européennes. Le tableau ci-contre donne les durées de vol entre ces différentes villes. ¨Comment déterminer le trajet le plus rapide entre deux villes ? ¨Comment modifier la méthode précédente afin de prendre en compte la durée des escales dans les différentes villes ? |
|
Fin des exercices sur les problèmes de chemins |
Parcourir le cahier |
Un tournoi est un graphe orienté tel que toute paire de sommets
est reliée par un arc, dans un sens ou dans l’autre (mais pas dans les deux
sens).
¨Pourquoi, selon vous, appelle-t-on
de tels graphes des tournois ?
¨Montrez que si un tournoi contient
un circuit de longueur k, alors il contient également des circuits de
longueur k’, pour tout k’ < k (une « preuve » à l’aide
d’un dessin suffit…).
¨Dessinez un tournoi à 6 sommets ne
possédant pas de circuit de longueur 4.
Dans un « tournoi », un ensemble de n individus (ou équipes) se rencontrent deux à deux, chaque rencontre se soldant par la victoire de l’un et la défaite de l’autre… Ceci peut être représenté à l’aide d’un graphe dont les sommets correspondent aux individus et tel qu’un arc va du sommet A vers le sommet B si la rencontre correspondante a vu la victoire de A sur B…
Supposons qu’un tournoi T possède un circuit C = x1x2…xkx1 de longueur k > 3 (en effet, pour k=3, il n’y a rien à prouver). Nous allons d’abord montrer que T possède un circuit de longueur 3.
Considérons n’importe quel sommet du circuit C, x1 par exemple. Nous affirmons qu’il existe nécessairement un arc xixi+1 dans T, avec 1 < i < k, tel que x1xi et xj+1x1 sont des arcs (en d’autres termes, x1xixi+1x1 forme un circuit). On peut exhiber un tel arc en « tournant » autour de C de la façon suivante :
posons i=2 ; si x3x1 est un arc, nous avons gagné (x1x2x3x1 est un circuit) ; dans le cas contraire, x1x3 est un arc et nous pouvons poser i=3…
en continuant de la sorte, nous allons nécessairement trouver un arc xixi+1 ayant la propriété cherchée car xkx1 est un arc de T (au pire, la solution sera donc l’arc xk-1xk).
Nous allons terminer la preuve en montrant que dès que nous avons un circuit de taille k’ composé de sommets de C, avec 3 £ k’ < k-1, nous avons nécessairement un circuit de taille k’+1, toujours composé de sommets de C (nous montrons ainsi une propriété plus forte que celle annoncée dans l’exercice).
Soit donc C’ = y1y2…yk’y1 un circuit composé de sommets de C et notons X l’ensemble des sommets de C non utilisés dans C’.
Supposons qu’il existe un sommet x de X qui soit successeur de certains sommets de C’ et prédécesseur d’autres sommets de C’. Dans ce cas, il y a nécessairement un arc yjyj+1 dans C’ tel que yj est prédécesseur de x et yj+1 est successeur de x. Nous avons alors un circuit de longueur k’+1 : y1y2…yjxyj+1…xk’x1 (nous avons pris ici un « raccourci » dans l’écriture car l’arc yjyj+1 peut être l’arc yky1…).
Si on ne peut trouver un tel sommet x, cela signifie que l’ensemble X peut être partitionné en deux sous-ensembles S et P respectivement composés des sommets successeurs de tous les sommets de C’ et des sommets prédécesseurs de tous les sommets de C’. Aucun de ces deux sous-ensembles ne peut être vide car nous savons qu’un circuit unit les sommets x1,…,xk. Pour la même raison, il existe nécessairement un sommet s dans S et un sommet p dans P tel que sp est un arc dans T. (Dans le cas contraire, l’ensemble S (ou P) n’aurait que des prédécesseurs (ou des successeurs) parmi les autres sommets et le circuit initial C ne pourrait exister).
Nous avons alors un circuit de longueur k’+1, donné par y1spy3…yk’y1 (voir figure ci-dessous).
Finalement, la figure suivante montre un tournoi à 6 sommets ne possédant aucun circuit de longueur supérieure à 3 (ce tournoi est composé de 2 circuits de longueur 3 réunis par des arcs ayant tous la même direction) :
Un robot se promène sur le graphe ci-contre. Partant d’un sommet quelconque s, appelé sommet de stockage, il doit déposer un cube sur chacun des autres sommets. Il possède suffisamment de cubes sur le sommet de stockage, mais ne peut transporter qu’un cube à la fois (il doit donc repasser par le sommet de stockage avant de livrer un autre cube). Calculer, pour chacun des sommets du graphe, le trajet minimum que doit parcourir le robot si ce sommet est sommet de stockage.
Quel est le « meilleur » sommet de stockage ?
Pour un sommet donné, il est nécessaire de calculer la somme des longueurs des plus courts chemins de ce sommet aux autres sommets. La figure suivante donne cette valeur pour le sommet A, puis pour tous les sommets du graphe. Le meilleur sommet de stockage est donc le sommet X…
Considérons le graphe ci-contre. |
|
On peut essayer d’énumérer les cycles de longueur 5 par rapport au nombre d’arêtes « extérieures » qu’ils contiennent. La figure suivante montre les « schémas » de cycles correspondants et le nombre de tels cycles obtenus par rotation… Le nombre total de cycles de longueur 5 est donc 12…
Même principe pour les cycles de longueur 6, au nombre de 10 :
Les cycles de longueur 8, au nombre de 15 :
Et enfin les cycles de longueur 9, au nombre de 20 :
Construire le graphe orienté dont les sommets sont les entiers compris
entre 1 et 24 et dont les arcs relient x à y lorsque x
divise y. De plus, les arcs sont valués par le quotient y/x (ainsi,
l’arc allant de 3 vers 15 a la valeur 5).
¨Comment reconnaît-on dans ce graphe
un nombre premier ?
¨Comment retrouver dans ce graphe la
décomposition d’un nombre en facteurs premiers ?
Un nombre premier correspond à un sommet de degré entrant 2 puisqu’il doit être divisible par 1 et lui-même (n’oublions pas la boucle présente en chaque sommet), ou de degré entrant 1 (car 1 est premier et n’est divisible que par lui même).
Si l’on considère un chemin allant de 1 à n, le produit des valeurs des arcs qui le composent vaut nécessairement n… On peut alors, dans le graphe précédent, ne conserver que les arcs dont la valeur est un nombre premier et qui ne sont pas des boucles. Tout sommet n est alors tel qu’il existe un unique chemin de 1 à n, dont les valeurs d’arcs donnent la décomposition en facteurs premiers.
Remplir le tableau ci-dessous qui, pour le graphe valué ci-contre, donne la valeur du plus court chemin d’un sommet à un autre.
|
|
Le calcul peut se faire directement… On obtient le tableau suivant :
A |
B |
C |
D |
E |
F |
G |
|
A |
0 |
8 |
10 |
15 |
18 |
20 |
24 |
B |
22 |
0 |
2 |
7 |
10 |
12 |
16 |
C |
19 |
20 |
0 |
5 |
8 |
10 |
14 |
D |
14 |
20 |
22 |
0 |
3 |
5 |
14 |
E |
11 |
17 |
19 |
9 |
0 |
2 |
11 |
F |
21 |
15 |
17 |
7 |
10 |
0 |
9 |
G |
27 |
6 |
8 |
13 |
16 |
18 |
0 |
Exécutez l’algorithme de Dijkstra sur le graphe précédent, à partir du sommet C, puis à partir du sommet F.
Exercice 36
À partir du sommet C, nous obtenons :
Initial : |
poids = ¥, ¥, 0, ¥, ¥, ¥, ¥ |
venant de : -, -, C, -, -, -, - |
P = Æ |
choix de C : |
poids = ¥, ¥, 0, 5, ¥, ¥, 14 |
venant de : -, -, C, C, -, -, C |
P = {C} |
choix de D : |
poids = ¥, ¥, 0, 5, 8, ¥, 14 |
venant de : -, -, C, C, D, -, C |
P = {C,D} |
choix de E : |
poids = 19, ¥, 0, 5, 8, 10, 14 |
venant de : E, -, C, C, D, E, C |
P = {C,D,E} |
choix de F : |
poids = 19, ¥, 0, 5, 8, 10, 14 |
venant de : E, -, C, C, D, E, C |
P = {C,D,E,F} |
choix de G : |
poids = 19, 20, 0, 5, 8, 10, 14 |
venant de : E, G, C, C, D, E, C |
P = {C,D,E,F,G} |
choix de A : |
poids = 19, 20, 0, 5, 8, 10, 14 |
venant de : E, G, C, C, D, E, C |
P = {A,C,D,E,F,G} |
choix de B : |
poids = 19, 20, 0, 5, 8, 10, 14 |
venant de : E, G, C, C, D, E, C |
P = {A,B,C,D,E,F,G} |
fin de l’algorithme….
À partir du sommet F, nous obtenons :
Initial : |
poids = ¥, ¥, ¥, ¥, ¥, 0, ¥ |
venant de : -, -, -, -, -, F, - |
P = Æ |
choix de F : |
poids = ¥, ¥, ¥, 7, ¥, 0, 9 |
venant de : -, -, -, F, -, F, F |
P = {F} |
choix de D : |
poids = ¥, ¥, ¥, 7, 10, 0, 9 |
venant de : -, -, -, F, D, F, F |
P = {D,F} |
choix de G : |
poids = ¥, 15, ¥, 7, 10, 0, 9 |
venant de : -, G, -, F, D, F, F |
P = {D,F,G} |
choix de E : |
poids = 21, 15, ¥, 7, 10, 0, 9 |
venant de : E, G, -, F, D, F, F |
P = {D,E,F,G} |
choix de B : |
poids = 21, 15, 17, 7, 10, 0, 9 |
venant de : E, G, B, F, D, F, F |
P = {B,D,E,F,G} |
choix de C : |
poids = 21, 15, 17, 7, 10, 0, 9 |
venant de : E, G, B, F, D, F, F |
P = {B,C,D,E,F,G} |
choix de A : |
poids = 21, 15, 17, 7, 10, 0, 9 |
venant de : E, G, B, F, D, F, F |
P = {A,B,C,D,E,F,G} |
fin de l’algorithme….
La compagnie Europ’Air dessert différentes villes européennes. Le tableau ci-contre donne les durées de vol entre ces différentes villes. ¨Comment déterminer le trajet le plus rapide entre deux villes ? ¨Comment modifier la méthode précédente afin de prendre en compte la durée des escales dans les différentes villes ? |
|
Il suffit de dessiner le graphe dont les sommets sont les villes et les arcs les dessertes de la compagnie, en valuant chaque arc par la durée du vol correspondant. Un algorithme de plus court chemin permet alors de résoudre le problème.
Pour prendre en compte les durées d’escale, deux méthodes sont possibles :
1. Modifier l’algorithme précédent, en incluant dans le calcul du coût d’un chemin les durées d’escale…
2. Transformer le graphe selon le principe décrit ci-dessous. L’algorithme reste alors le même, en choisissant « correctement » les sommets de départ et d’arrivée (sans escale) : on part donc de Départ2 et on arrive en Arrivée1…