1 / 18

Animation von Dijkstra

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

reid
Download Presentation

Animation von Dijkstra

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. 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

  3. 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

  4. 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]

  5. 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

  6. 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: π

  7. 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: π

  8. 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: π

  9. 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: π

  10. 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: π

  11. 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: π

  12. 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: π

  13. 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: π

  14. 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: π

  15. 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: π

  16. 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: π

  17. 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

  18. 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) }

More Related