animation von dijkstra

18
1 Petra 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

Upload: lethia

Post on 11-Jan-2016

36 views

Category:

Documents


0 download

DESCRIPTION

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. Algorithmus von Dijkstra. Bezeichnungen Vorgänger von Knoten v im SPT: π [ v ] - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 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

Page 2: Animation von Dijkstra

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]

Page 3: Animation von Dijkstra

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

Page 4: Animation von Dijkstra

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]

Page 5: Animation von Dijkstra

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

Page 6: Animation von Dijkstra

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

Page 7: Animation von Dijkstra

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

Page 8: Animation von Dijkstra

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

Page 9: Animation von Dijkstra

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

Page 10: Animation von Dijkstra

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

Page 11: Animation von Dijkstra

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

Page 12: Animation von Dijkstra

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

Page 13: Animation von Dijkstra

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

Page 14: Animation von Dijkstra

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

Page 15: Animation von Dijkstra

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

Page 16: Animation von Dijkstra

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

Page 17: Animation von Dijkstra

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

Page 18: Animation von Dijkstra

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