Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
1
Animation von Dijkstra
Professor Dr. Petra Mutzel Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund 21. VO DAP2 SS Juli 2009 1
2
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]
3
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 S := S ⋃ {v} d[v] := d[u] + w(e) π[v] := u end while Realisierung durch PQ und edge scanning
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 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]
5
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
6
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) }
7
Algorithmus von Dijkstra
22 2 10 4 7 4 11 9 s 7 8 2 4 12 5 5 1 Priority Queue PQ: Knoten, Priorität Weglänge Kandidatenmenge K in PQ: Weg von s gefunden Abgeschlossene Knoten: Minimum aus PQ
8
Algorithmus von Dijkstra
22 2 4 10 4 7 4 11 9 s 7 8 2 4 12 5 12 5 1 Zwei Mengen Front Schnitt Ausgehende Kanten des gewählten Knoten Erreichte Kandidaten Vorgänger-Kanten: π
9
Algorithmus von Dijkstra
22 2 4 26 10 4 7 4 11 9 s 7 8 2 4 12 5 12 5 1 Ausgehende Kanten des gewählten Knoten Erreichte Kandidaten Vorgänger-Kanten: π
10
Algorithmus von Dijkstra
22 2 4 26 10 4 7 4 11 9 s 7 8 2 4 12 5 12 5 1 Ausgehende Kanten des gewählten Knoten Erreichte Kandidaten Vorgänger-Kanten: π
11
Algorithmus von Dijkstra
22 2 4 26 10 4 7 4 11 9 s 14 7 8 2 4 12 5 12 17 5 1 Zwei Mengen Front Schnitt Ausgehende Kanten des gewählten Knoten Erreichte Kandidaten Vorgänger-Kanten: π
12
Algorithmus von Dijkstra
22 2 4 26 10 4 7 4 11 9 s 14 7 8 2 4 12 5 12 17 5 1 Ausgehende Kanten des gewählten Knoten Erreichte Kandidaten Vorgänger-Kanten: π
13
Algorithmus von Dijkstra
22 2 4 25 10 4 7 4 11 9 s 14 7 8 2 4 12 5 12 17 5 1 Zwei Mengen Front Schnitt Ausgehende Kanten des gewählten Knoten Erreichte Kandidaten Vorgänger-Kanten: π
14
Algorithmus von Dijkstra
22 2 4 25 10 4 7 4 11 9 s 14 7 8 2 4 12 5 12 17 5 1 Ausgehende Kanten des gewählten Knoten Erreichte Kandidaten Vorgänger-Kanten: π
15
Algorithmus von Dijkstra
22 2 4 25 10 4 7 4 11 9 s 14 7 8 2 4 12 5 12 17 18 5 1 Ausgehende Kanten des gewählten Knoten Erreichte Kandidaten Vorgänger-Kanten: π
16
Algorithmus von Dijkstra
22 2 4 22 26 10 4 7 4 11 9 s 14 7 8 23 2 4 12 5 12 17 18 5 1 Zwei Mengen Front Schnitt Ausgehende Kanten des gewählten Knoten Erreichte Kandidaten Vorgänger-Kanten: π
17
Algorithmus von Dijkstra
22 2 4 22 26 10 4 7 4 11 9 s 14 7 8 23 2 4 12 5 12 17 18 5 1 Ausgehende Kanten des gewählten Knoten Erreichte Kandidaten Vorgänger-Kanten: π
18
Algorithmus von Dijkstra
22 2 4 22 26 10 4 7 4 11 9 s 14 7 8 23 2 4 12 5 12 17 18 5 1 Ausgehende Kanten des gewählten Knoten Erreichte Kandidaten Vorgänger-Kanten: π
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.