11-1Plus courts chemins
PLUS COURTS CHEMINS
(Shortest Paths)
Graphes pondérés
Plus courts chemins
BOS
JFK
MIA
ORD
DFW
SFO
LAX
2704
1846 867
740
1258
1090
802
1464
337
2342
1235 1121
187
11-2Plus courts chemins
Graphes pondérés
•Les
poids sur les arcs d’un graphe représentent des
distances, des coûts, etc.
Un exemple d’un graphe pondéré non-orienté:
BOS
JFK
MIA
ORD
DFW
SFO
LAX
2704
1846 867
740
1258
1090
802
1464
337
2342
1235 1121
187
11-3Plus courts chemins
Plus court chemin
BFS trouve le(s) chemin(s) au nombre d’arcs
minimal à partir du sommet de départ
Ainsi, BFS trouve le plus court chemin en supposant
que chaque arc a le même poids
Dans plusieurs domaines, par exemple les réseaux
routiers, les arcs d’un graphe ont des poids différents
Comment trouver les chemins au poids total
minimal?
Exemple - Boston à Los Angeles:
BOS
JFK
MIA
ORD
DFW
SFO
LAX
2704
1846 867
740
1258
1090
802
1464
337
2342
1235 1121
187
11-4Plus courts chemins
Algorithme de Dijkstra
L’Algorithme de Dijkstra trouve les plus courts
chemins d’un sommet de départ v vers tous les
autres sommets d’un graphe avec:
- des arcs non-orientés
- des arc au poids non-négatif
L’algorithme calcule, pour chaque sommet u, la
distance de u à partir du sommet v, et donc le poids
d’un plus court chemin entre v et u.
L’algorithme conserve l’ensemble des sommets pour
lesquels la distance a été calculée, appelé nuage
(cloud) C
Chaque sommet a une étiquette D. Pour tout sommet
u, nous appellerons son étiquette D[u]. D[u] contient
une approximation de la distance entre v et u.
L’algorithme met à jour une valeur D[u] quand il
trouve un chemin plus court de v à u.
Lorsqu’un sommet u est ajouté au nuage, son
étiquette D[u] est égale à la distance actuelle (finale)
entre le sommet de départ v et le sommet u.
Initialement, nous choisissons:
- D[v] = 0 ...la distance de v à lui-même est 0...
- D[u] = pour u v ...ceci va changer...
11-5Plus courts chemins
L’algorithme: Expansion du nuage
Répétez jusqu’à ce que tous les sommets soient dans
le nuage:
- soit u un sommet hors du nuage qui a la plus petite
étiquette D[u]. (À la première itération, il est
évident que le sommet de départ sera choisi)
- ajoutez u au nuage C
- mettez à jour les étiquettes des sommets adjacents
à u de la façon suivante:
for chaque sommet z adjacent à u do
if z est hors du nuage C then
if D[u] + weight(u,z) < D[z] then
D[z] = D[u] + weight(u,z)
cette étape est appelée une relaxation de l’arc (u,z)
u
v
z
30
60
0u5
80
90
85
v est mis dans le nuage en premier. Puis ce u. Et ce u.
1 / 61 100%