1petra mutzel dap2 ss08 animation von dijkstra professor dr. petra mutzel lehrstuhl für algorithm...

18
1 Petra Mutzel DAP2 SS08 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 1 Petra Mutzel DAP2 SS08

Upload: mariele-kemna

Post on 06-Apr-2015

103 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1Petra Mutzel DAP2 SS08 Animation von Dijkstra Professor Dr. Petra Mutzel Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund

1Petra Mutzel DAP2 SS08

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

1Petra Mutzel DAP2 SS08

Page 2: 1Petra Mutzel DAP2 SS08 Animation von Dijkstra Professor Dr. Petra Mutzel Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund

2Petra Mutzel DAP2 SS08

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]

Page 3: 1Petra Mutzel DAP2 SS08 Animation von Dijkstra Professor Dr. Petra Mutzel Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund

3Petra Mutzel DAP2 SS08

Algorithmus 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

Page 4: 1Petra Mutzel DAP2 SS08 Animation von Dijkstra Professor Dr. Petra Mutzel Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund

4Petra Mutzel DAP2 SS08

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]

Page 5: 1Petra Mutzel DAP2 SS08 Animation von Dijkstra Professor Dr. Petra Mutzel Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund

5Petra Mutzel DAP2 SS08

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

Page 6: 1Petra Mutzel DAP2 SS08 Animation von Dijkstra Professor Dr. Petra Mutzel Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund

6Petra Mutzel DAP2 SS08

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

Page 7: 1Petra Mutzel DAP2 SS08 Animation von Dijkstra Professor Dr. Petra Mutzel Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund

7Petra Mutzel DAP2 SS08

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

Page 8: 1Petra Mutzel DAP2 SS08 Animation von Dijkstra Professor Dr. Petra Mutzel Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund

8Petra Mutzel DAP2 SS08

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

Page 9: 1Petra Mutzel DAP2 SS08 Animation von Dijkstra Professor Dr. Petra Mutzel Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund

9Petra Mutzel DAP2 SS08

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

Page 10: 1Petra Mutzel DAP2 SS08 Animation von Dijkstra Professor Dr. Petra Mutzel Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund

10Petra Mutzel DAP2 SS08

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

Page 11: 1Petra Mutzel DAP2 SS08 Animation von Dijkstra Professor Dr. Petra Mutzel Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund

11Petra Mutzel DAP2 SS08

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

Page 12: 1Petra Mutzel DAP2 SS08 Animation von Dijkstra Professor Dr. Petra Mutzel Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund

12Petra Mutzel DAP2 SS08

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

Page 13: 1Petra Mutzel DAP2 SS08 Animation von Dijkstra Professor Dr. Petra Mutzel Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund

13Petra Mutzel DAP2 SS08

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

Page 14: 1Petra Mutzel DAP2 SS08 Animation von Dijkstra Professor Dr. Petra Mutzel Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund

14Petra Mutzel DAP2 SS08

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

Page 15: 1Petra Mutzel DAP2 SS08 Animation von Dijkstra Professor Dr. Petra Mutzel Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund

15Petra Mutzel DAP2 SS08

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

Page 16: 1Petra Mutzel DAP2 SS08 Animation von Dijkstra Professor Dr. Petra Mutzel Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund

16Petra Mutzel DAP2 SS08

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

Page 17: 1Petra Mutzel DAP2 SS08 Animation von Dijkstra Professor Dr. Petra Mutzel Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund

17Petra Mutzel DAP2 SS08

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

Page 18: 1Petra Mutzel DAP2 SS08 Animation von Dijkstra Professor Dr. Petra Mutzel Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund

18Petra Mutzel DAP2 SS08

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