1Petra Mutzel DAP2 SS09
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 7. Juli 2009
1
2Petra Mutzel DAP2 SS09
Algorithmus von DijkstraAnalogien 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]
3Petra Mutzel DAP2 SS09
Idee von DijkstraS := {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
S := S {⋃ v}
d[v] := d[u] + w(e)
π[v] := u
end while
Realisierung durchPQ und edge scanning
4Petra Mutzel DAP2 SS09
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
• Wähle mit EXTRACTMIN Knoten u mit minimalem Abstandswert. Start: (s) = d[s] = 0
• Aktualisiere für ausgehende Kanten (u, v) Abstandswerte der Endknoten („Relaxieren“) mit DECREASEPRIORITY und Vorgänger π[v]
5Petra Mutzel DAP2 SS09
Pseudo-Code: Initialisierung
G=(V, A), w: A→R0+
(1) var π[V], PriorityQueue Q, pos[V]
(2) for each u V \ {s} do { • pos[u] := Q.INSERT(, u)• π[u] := nil
(5) }
(6) pos[s] := Q.INSERT(0, s)
(7) π[s] := nil
6Petra Mutzel DAP2 SS09
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) }
7Petra Mutzel DAP2 SS09
0
Algorithmus von Dijkstra
4
12
22
10
2
119
5
47
4
2
7
8
5
s
Priority Queue PQ: Knoten, Priorität WeglängeKandidatenmenge K in PQ: Weg von s gefundenAbgeschlossene Knoten: Minimum aus PQ
1
8Petra Mutzel DAP2 SS09
Algorithmus von Dijkstra
4
12
22
10
2
119
5
47
4
2
7
8
5
s 0
4
Ausgehende Kanten des gewählten KnotenErreichte KandidatenVorgänger-Kanten: π
121
9Petra Mutzel DAP2 SS09
Algorithmus von Dijkstra
4
12
22
10
2
119
5
47
4
2
7
8
5
s 0
4
Ausgehende Kanten des gewählten KnotenErreichte KandidatenVorgänger-Kanten: π
12
26
1
10Petra Mutzel DAP2 SS09
12
26
Algorithmus von Dijkstra
4
12
22
10
2
119
5
47
4
2
7
8
5
s 0
4
Ausgehende Kanten des gewählten KnotenErreichte KandidatenVorgänger-Kanten: π
1
11Petra Mutzel DAP2 SS09
12
26
Algorithmus von Dijkstra
14
17
4
12
22
10
2
119
5
47
4
2
7
8
5
s 0
4
Ausgehende Kanten des gewählten KnotenErreichte KandidatenVorgänger-Kanten: π
1
12Petra Mutzel DAP2 SS09
12
26
Algorithmus von Dijkstra
14
17
4
12
22
10
2
119
5
47
4
2
7
8
5
s 0
4
Ausgehende Kanten des gewählten KnotenErreichte KandidatenVorgänger-Kanten: π
1
13Petra Mutzel DAP2 SS09
12
25
Algorithmus von Dijkstra
14
17
4
12
22
10
2
119
5
47
4
2
7
8
5
s 0
4
Ausgehende Kanten des gewählten KnotenErreichte KandidatenVorgänger-Kanten: π
1
14Petra Mutzel DAP2 SS09
12
25
Algorithmus von Dijkstra
14
17
4
12
22
10
2
119
5
47
4
2
7
8
5
s 0
4
Ausgehende Kanten des gewählten KnotenErreichte KandidatenVorgänger-Kanten: π
1
15Petra Mutzel DAP2 SS09
12
25
Algorithmus von Dijkstra
14
17 18
4
12
22
10
2
119
5
47
4
2
7
8
5
s 0
4
Ausgehende Kanten des gewählten KnotenErreichte KandidatenVorgänger-Kanten: π
1
16Petra Mutzel DAP2 SS09
12
22
Algorithmus von Dijkstra
14
26
23
17 18
4
12
22
10
2
119
5
47
4
2
7
8
5
s 0
4
Ausgehende Kanten des gewählten KnotenErreichte KandidatenVorgänger-Kanten: π
1
17Petra Mutzel DAP2 SS09
12
22
Algorithmus von Dijkstra
14
26
23
17 18
4
12
22
10
2
119
5
47
4
2
7
8
5
s 0
4
Ausgehende Kanten des gewählten KnotenErreichte KandidatenVorgänger-Kanten: π
1
18Petra Mutzel DAP2 SS09
12
22
Algorithmus von Dijkstra
14
26
23
17 18
4
12
22
10
2
119
5
47
4
2
7
8
5
s 0
4
Ausgehende Kanten des gewählten KnotenErreichte KandidatenVorgänger-Kanten: π
1