TD 6

publicité
Travaux Dirigés d’algorithmique no6
Plus courts chemins dans un graphe
Nous introduisons dans ce TD la notion de plus courts chemins entre différents
sommets d’un graphe, ainsi que les algorithmes permettant de les calculer.
x Exercice 1. Quel est le plus court chemin?
12
5
6
@
1
6 5 26 4
@
5
R
@
q
1
1
3
4
@ 2
3
@
?
R
@
3
2
@ 4
1
@
? @
R
521
3
5
64
-5
?
2
4
1. Dans le 1er graphe, quel est le plus court chemins du sommet 1 au sommet 5?
2. Recalculez ce plus court chemin si on remplace l’arc de poids -5 par un arc de poids 2.
3. Calculez le plus court chemin entre les sommets 1 et 6 dans le 2e graphe.
x Exercice 2. Plus court chemin depuis un sommet unique.
1. Rappeler le principe et la complexité de l’algorithme de Dijkstra. Quelle structure de
données peut-on utiliser pour atteindre cette complexité?
2. Utiliser l’algorithme de Dijkstra sur le graphe ci-dessous pour obtenir les plus courts
chemins à partir du sommet A, puis à partir du sommet E.
2
j
E
*
7 I
@
@ 5
6
2
@
@
@
4
5
15
@
8
@ @
1
3
@
@
?
R
@
@
4
B D
F
1
A
1
1
-
C
2
3. Rappeler le principe et la complexité de l’algorithme de Bellman-Ford.
l’avantage par rapport à l’algorithme de Dijkstra?
Quel est
4. Utiliser l’algorithme de Bellman-Ford sur le graphe ci-dessous pour obtenir les plus
courts chemins à partir du sommet A, puis à partir du sommet E.
5. Proposer une amélioration simple de cet algorithme.
4
j
E
*
5
@
5
I
@
6
2
@
@
@ -8 4
-2
15
@
@ @
1
-3
@
@
?
R
@
@
3
F
D
B
9
A
2
-
C
-1
x Exercice 3. Plus court chemin pour tout couple de sommets.
L’algorithme de Floyd-Warshall se base sur l’observation suivante : soit p le plus court
chemin entre les sommets i et j. Si on considère que p n’emprunte que des sommets dans
l’ensemble {1, . . . , k}, avec 1 < k ≤ |S|, alors :
• soit k ne fait pas partie du chemin le plus court entre i et j, et on peut donc dire que
p n’emprunte que des sommets issus de l’ensemble {1, . . . , k − 1};
• soit k fait partie du plus court chemin entre i et j, on peut donc dire qu’il existe deux
chemins p1 et p2 entre i et k, et k et j, et que ces chemins n’empruntent que des sommets
issus de l’ensemble {1, . . . , k − 1}.
Sur ce principe de récursion, on construit les matrices des poids des plus courts chemins
empruntant des sommets issus des ensembles {∅}, {1}, {1, 2}, . . . , {1, . . . , |S|}.
2
I
C@
3
C @
4
C @@
7 C 1
1
3
8
C 1
k Q
Q
C -5 A -4 Q
C A 2Q
Q
CW AU
Q
65
4
1. Quelle est la complexité de la méthode qui consiste à appliquer l’algorithme de Dijkstra
plusieurs fois en vue d’obtenir les plus courts chemins entre tous les couples de sommets?
2. Construisez la matrice des poids des plus courts chemins entre tous les couples de
sommets possibles du graphe ci-dessus en utilisant l’algorithme de Floyd-Warshall.
3. Que faut-il faire pour que cet algorithme construise, en même temps que la matrice des
poids des plus courts chemins, une matrice permettant d’obtenir ces chemins?
2
Téléchargement