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%