Académique Documents
Professionnel Documents
Culture Documents
court chemin
A
0
Plus précisément:
si p = (v0, v1, … , vk) est un chemin le plus
court entre les sommets v0 et vk
a c
3
2 1
3 2 i Valeur de dist : i
s 0 e
Vide : VMAX
1
5
1
b d File prioritaire Q
s a b c d e
17
Heike Ripphausen-Lipa & Jean-Michel Adam
Algorithme de Dijkstra
a c
3
2
2 1
s 0 3 2 e
1
5
1
1
b d File prioritaire Q
b a c d e
s 0 3 2 e
1
5
1 2
1
b d File prioritaire Q
a d c e
19
Heike Ripphausen-Lipa & Jean-Michel Adam
Algorithme de Dijkstra
a c
2 3
2 5
2 1
s 0 3 2 e
1
5
1 2
1
b d File prioritaire Q
d c e
20
Heike Ripphausen-Lipa & Jean-Michel Adam
Algorithme de Dijkstra
a c Relax
2 3
2 4
2 1
s 0 3 2 7 e
1
5
1 2
1
b d File prioritaire Q
c e
21
Heike Ripphausen-Lipa & Jean-Michel Adam
Algorithme de Dijkstra
a c
2 3
2 4
2 1
s 0 3 2 5 e
1
5
1 2
1
b d File prioritaire Q
22
Heike Ripphausen-Lipa & Jean-Michel Adam
Algorithme de Dijkstra
a c
2 3
2 4
2 1
s 0 3 2 5 e
1
5
1 2
1
b d File prioritaire Q
23
Heike Ripphausen-Lipa & Jean-Michel Adam
Algorithme de Dijkstra dans une table
Initialisation
sommet s a b c d e
dist 0 ∞ ∞ ∞ ∞ ∞
dist 0 2 1 ∞ ∞ ∞
dist 0 2 1 ∞ 2 ∞
dist 0 2 1 5 2 ∞
pred NIL s s d b d
dist 0 2 1 4 2 7
pred NIL s s d b c
dist 0 2 1 4 2 5
pred NIL s s d b c
dist 0 2 1 4 2 5
a b
3
1 8
s 3 1 6 c
7
3
1
d e
28
Heike Ripphausen-Lipa & Jean-Michel Adam
Temps d’exécution de
l’algorithme de Dijkstra
Temps d‘exécution total
Initialize-Source-Unique(G, s) O(n)
Extraire-Min
dans la
S ← Ø; O(1)
queue
Q ← V(G); O(n)
pripritaire Q
tantque (Q ≠ Ø) O(n)
u ← Extraire-Min(Q) O(n * log n)
S ← S.ajouter(u) O(n)
pour tout sommet v adjacent à u
Relax(u,v,w) O(m)
fpour
ftq
O(n* log n + m) = O(n2)
a c
3
6
s -3
La valeur dist de c reste 9
bien que la valeur dist de a
7 soit diminuée de 6 à 4
A Trouver le
0
chemin le plus
court de A à B
18
5
A
0
18 10
5
A 17
0
B
28
15
18 10
5
A 17
0
B
28 21
15
18 10 28
5
Choisir ce sommet
A 17 semble ne pas
0
avoir de sens, parce
que la distance de
B augmente
En comparaison à ce sommet
Algorithme A* (1968)
L’algorithme A* est un algorithme pour trouver un
chemin entre deux sommets, et qui tente de corriger
le problème présenté précédemment sur l’algorithme
de Dijkstra.
40
Algorithme de Bellman-Ford
L‘algorithme de Bellman-Ford résoud le problème
de recherche de plus court chemin depuis une
source unique, mais en autorisant des arcs portant
des poids négatifs.
Il permet de détecter l‘existence d‘un circuit
absorbant, c‘est-à-dire de poids total strictement
négatif, accessible depuis le sommet source.
Cependant, si le graphe contient un circuit
absorbant, il n‘existe pas de solution.
L‘algorithme de Bellman-Ford utilise également la
méthode de relaxation
a c
3
6
répéter
relaxer tous les arcs
Jusqu’à ce qu’il n’y ait plus de
changement de la valeur dist
-2
u v
5
6 i dist = i
-3 dist = VMAX
z 0 8 7
-4
7
2
9
x y
-2
u v
5
6
6
-3
z 0 8 7
-4
7
2
7
9
x y
sommet u v x y z
dist ∞ ∞ ∞ ∞ 0
dist 6 ∞ 7 ∞ 0
Heike Ripphausen-Lipa & Jean-Michel Adam 62
Algorithme de Bellman-Ford
dans une table
Après la seconde execution de l’iteration intérieure
sommet u v x y z
pred z x z u NIL
dist 6 4 7 2 0
pred v x z u NIL
dist 2 4 7 2 0
Heike Ripphausen-Lipa & Jean-Michel Adam 63
Algorithme de Bellman-Ford
dans une table
Après la quatrième execution de l’iteration intérieure
sommet u v x y z
pred v x z u NIL
dist 2 4 7 -2 0
a c
3
6
s -3
sommet a b c s
a c
3
pred 6
dist s -3
7
Après la première execution de l’iteration intérieure
b
sommet a b c s
pred
dist
pred
dist
69
Chemins les plus courts entre
toutes les paires de sommets
Si l‘on veut trouver pour toutes les paires
de sommets les chemins les plus courts,
l‘algorithme décrit pécédemment peut être
appliqué en considérant successivement
chaque sommet comme sommet de départ
L‘algorithme de Floyd-Warshall est
cependant plus efficace pour le
problème de plus courts chemins
entre tous les sommets
1 2 0 1 -1 2
DIST1
2 3
2
1
1 -1 -2 0
3 5
1
DIST1 1 2 3 4 PRED1 1 2 3 4
2 4
3 1 1
2 2
3 3
4 4
DIST2 1 2 3 4 PRED2 1 2 3 4
2 4 1 1
3
2 2
3 3
4 4