Download - Animation von Dijkstra
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