Animation von Dijkstra
180 likes | 331 Vues
Animation von Dijkstra. Professor Dr. Petra Mutzel Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund . 23. VO DAP2 SS 2008 3. Juli 2008. Petra Mutzel DAP2 SS08. 1. Algorithmus von Dijkstra. Bezeichnungen
Animation von Dijkstra
E N D
Presentation Transcript
Animation von Dijkstra Professor Dr. Petra Mutzel Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund 23. VO DAP2 SS 2008 3. Juli 2008 Petra Mutzel DAP2 SS08 1
Algorithmus von Dijkstra • 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] 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
Algorithmus von Dijkstra S := {s} // S Knoten im SPT d[s] := 0; π[s] := nil// s Wurzel whileA(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 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 EXTRACTMINKnoten 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]
Algorithmus von Dijkstra 22 2 10 7 4 4 11 9 s 0 7 8 2 4 5 12 1 5 Priority Queue PQ: Knoten, Priorität Weglänge Kandidatenmenge K in PQ: Weg von s gefunden Abgeschlossene Knoten: Minimum aus PQ
Algorithmus von Dijkstra 22 2 4 10 7 4 4 11 9 s 0 7 8 2 4 5 12 12 1 5 Ausgehende Kanten des gewählten Knoten Erreichte Kandidaten Vorgänger-Kanten: π
Algorithmus von Dijkstra 22 2 4 26 10 7 4 4 11 9 s 0 7 8 2 4 5 12 12 1 5 Ausgehende Kanten des gewählten Knoten Erreichte Kandidaten Vorgänger-Kanten: π
Algorithmus von Dijkstra 22 2 4 26 10 7 4 4 11 9 s 0 7 8 2 4 5 12 12 1 5 Ausgehende Kanten des gewählten Knoten Erreichte Kandidaten Vorgänger-Kanten: π
Algorithmus von Dijkstra 22 2 4 26 10 7 4 4 11 9 0 s 14 7 8 2 4 5 12 12 17 1 5 Ausgehende Kanten des gewählten Knoten Erreichte Kandidaten Vorgänger-Kanten: π
Algorithmus von Dijkstra 22 2 4 26 10 7 4 4 11 9 s 0 14 7 8 2 4 5 12 12 17 1 5 Ausgehende Kanten des gewählten Knoten Erreichte Kandidaten Vorgänger-Kanten: π
Algorithmus von Dijkstra 22 2 4 25 10 7 4 4 11 9 0 s 14 7 8 2 4 5 12 12 17 1 5 Ausgehende Kanten des gewählten Knoten Erreichte Kandidaten Vorgänger-Kanten: π
Algorithmus von Dijkstra 22 2 4 25 10 7 4 4 11 9 0 s 14 7 8 2 4 5 12 12 17 1 5 Ausgehende Kanten des gewählten Knoten Erreichte Kandidaten Vorgänger-Kanten: π
Algorithmus von Dijkstra 22 2 4 25 10 7 4 4 11 9 s 0 14 7 8 2 4 5 12 12 17 18 1 5 Ausgehende Kanten des gewählten Knoten Erreichte Kandidaten Vorgänger-Kanten: π
Algorithmus von Dijkstra 22 2 4 22 26 10 7 4 4 11 9 s 0 14 23 7 8 2 4 5 12 12 17 18 1 5 Ausgehende Kanten des gewählten Knoten Erreichte Kandidaten Vorgänger-Kanten: π
Algorithmus von Dijkstra 22 2 4 22 26 10 7 4 4 11 9 s 0 14 23 7 8 2 4 5 12 12 17 18 1 5 Ausgehende Kanten des gewählten Knoten Erreichte Kandidaten Vorgänger-Kanten: π
Algorithmus von Dijkstra 22 2 4 22 26 10 7 4 4 11 9 s 0 14 23 7 8 2 4 5 12 12 17 18 1 5 Ausgehende Kanten des gewählten Knoten Erreichte Kandidaten Vorgänger-Kanten: π
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
Pseudo-Code (8) whilenotQ.ISEMPTY() do { (9) (du, u ) := Q.EXTRACTMIN(); // du Abstand s zu u (10) pos[u] := nil // Minimum entfernt (11) for alle = (u,v) A-(u) do { // Erreichbare Knoten (12) ifdu+w(e) < Q.PRIORITY(pos[v]) then { (13) Q.DECREASEPRIORITY(pos[v], du + w(e)) (14) π[v] := u (15) } (16) } (17) }