 
                                Animation von Dijkstra
Professor Dr. Petra Mutzel
Lehrstuhl für Algorithm Engineering, LS11
Fakultät für Informatik, TU Dortmund
21. VO
DAP2 SS 2009
Petra Mutzel
7. Juli 2009
DAP2 SS09
1
Algorithmus von Dijkstra
Analogien mit BFS und Prim:
• BFS/Prim läßt einzelnen Baum wachsen: Neue
Kante verbindet Baum mit Rest
• Dijkstra bildet Kürzeste-Wege Baum (SPT)
ausgehend von Wurzel s, aber andere Auswahl
• Greedy, Priority Queue
Bezeichnungen
• Vorgänger von Knoten v im SPT: π[v]
• Kanten, die Knotenmenge S verlassen: A(S)
• Min. Abstand vom Startknoten zu Knoten v: d[v]
Petra Mutzel
DAP2 SS09
2
Idee von Dijkstra
S := {s}
// S Knoten im SPT
d[s] := 0; π[s] := nil
// s Wurzel
while A(S) ≠ ø do
// erreichbare Knoten
// Optimale Substruktur
Sei e = (u, v)  A(S) mit d[u] + w(e) minimal
Realisierung durch
PQ und edge scanning
S := S ⋃ {v}
d[v] := d[u] + w(e)
π[v] := u
end while
Petra Mutzel
DAP2 SS09
3
Realisierung von Dijkstra
• Knotenmenge S: Kürzester Weg mit Länge d[v]
bereits ermittelt
• Knotenmenge V \ S: Speichere vorläufige Werte
für den Abstand zu s (obere Schranke (v) 
d[v]) in Priority Queue, und aktualisiere Priorität,
falls günstigerer Weg gefunden wird, (s) = 0
1. Wähle mit EXTRACTMIN Knoten u mit
minimalem Abstandswert. Start: (s) = d[s] = 0
2. Aktualisiere für ausgehende Kanten (u, v)
Abstandswerte der Endknoten („Relaxieren“) mit
DECREASEPRIORITY und Vorgänger π[v]
Petra Mutzel
DAP2 SS09
4
Pseudo-Code: Initialisierung
G=(V, A), w: A→R0+
(1) var π[V], PriorityQueue Q, pos[V]
(2) for each u  V \ {s} do {
(3)
pos[u] := Q.INSERT(, u)
(4)
π[u] := nil
(5) }
(6) pos[s] := Q.INSERT(0, s)
(7) π[s] := nil
Petra Mutzel
DAP2 SS09
5
Pseudo-Code
(8) while not Q.ISEMPTY() do {
(9)
(du, u ) := Q.EXTRACTMIN(); // du Abstand s zu u
(10) pos[u] := nil
// Minimum entfernt
(11) for all e = (u,v)  A-(u) do {
// Erreichbare Knoten
(12)
if du+w(e) < Q.PRIORITY(pos[v]) then {
(13)
Q.DECREASEPRIORITY(pos[v], du + w(e))
(14)
π[v] := u
(15)
}
(16) }
(17) }
Petra Mutzel
DAP2 SS09
6
Algorithmus von Dijkstra
22
s 
0
9
2
12
10
4
2
7
4
11
7
8
4
5
1
5
Priority Queue PQ: Knoten, Priorität Weglänge
Kandidatenmenge K in PQ: Weg von s gefunden
Abgeschlossene Knoten: Minimum aus PQ
Petra Mutzel
DAP2 SS09
7
Algorithmus von Dijkstra
22
4
9
s 0
2
12
12
10
4
2
7
4
11
7
8
4
5
1
5
Ausgehende Kanten des gewählten Knoten
Erreichte Kandidaten
Vorgänger-Kanten: π
Petra Mutzel
DAP2 SS09
8
Algorithmus von Dijkstra
22
4
9
s 0
2
12
12
26
10
4
2
7
4
11
7
8
4
5
1
5
Ausgehende Kanten des gewählten Knoten
Erreichte Kandidaten
Vorgänger-Kanten: π
Petra Mutzel
DAP2 SS09
9
Algorithmus von Dijkstra
22
4
9
s 0
2
12
12
26
10
4
2
7
4
11
7
8
4
5
1
5
Ausgehende Kanten des gewählten Knoten
Erreichte Kandidaten
Vorgänger-Kanten: π
Petra Mutzel
DAP2 SS09
10
Algorithmus von Dijkstra
22
4
26
10
4
2
9
14
2
7
8
4
12
12
7
4
11
s 0
5
17
1
5
Ausgehende Kanten des gewählten Knoten
Erreichte Kandidaten
Vorgänger-Kanten: π
Petra Mutzel
DAP2 SS09
11
Algorithmus von Dijkstra
22
4
26
10
4
2
9
14
2
12
12
7
4
11
s 0
7
8
4
5
17
1
5
Ausgehende Kanten des gewählten Knoten
Erreichte Kandidaten
Vorgänger-Kanten: π
Petra Mutzel
DAP2 SS09
12
Algorithmus von Dijkstra
22
4
25
10
4
2
9
14
2
12
12
7
4
11
s 0
7
8
4
5
17
1
5
Ausgehende Kanten des gewählten Knoten
Erreichte Kandidaten
Vorgänger-Kanten: π
Petra Mutzel
DAP2 SS09
13
Algorithmus von Dijkstra
22
4
25
10
4
2
9
14
2
7
8
4
12
12
7
4
11
s 0
5
17
1
5
Ausgehende Kanten des gewählten Knoten
Erreichte Kandidaten
Vorgänger-Kanten: π
Petra Mutzel
DAP2 SS09
14
Algorithmus von Dijkstra
22
4
25
10
4
2
9
14
2
12
7
4
11
s 0
7
8
4
5
12
5
17
1
18
Ausgehende Kanten des gewählten Knoten
Erreichte Kandidaten
Vorgänger-Kanten: π
Petra Mutzel
DAP2 SS09
15
Algorithmus von Dijkstra
22
4
22
10
4
2
9
14
2
7
4
11
s 0
26
7
23
8
4
5
12
12
5
17
1
18
Ausgehende Kanten des gewählten Knoten
Erreichte Kandidaten
Vorgänger-Kanten: π
Petra Mutzel
DAP2 SS09
16
Algorithmus von Dijkstra
22
4
22
10
4
2
9
14
2
7
4
11
s 0
26
7
23
8
4
5
12
12
5
17
1
18
Ausgehende Kanten des gewählten Knoten
Erreichte Kandidaten
Vorgänger-Kanten: π
Petra Mutzel
DAP2 SS09
17
Algorithmus von Dijkstra
22
4
22
10
4
2
9
14
2
7
4
11
s 0
26
7
23
8
4
5
12
12
5
17
1
18
Ausgehende Kanten des gewählten Knoten
Erreichte Kandidaten
Vorgänger-Kanten: π
Petra Mutzel
DAP2 SS09
18