animation von dijkstra n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Animation von Dijkstra PowerPoint Presentation
Download Presentation
Animation von Dijkstra

Loading in 2 Seconds...

play fullscreen
1 / 18

Animation von Dijkstra - PowerPoint PPT Presentation


  • 100 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Animation von Dijkstra' - reid


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
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
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 dijkstra1
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
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 dijkstra2
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 dijkstra3
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 dijkstra4
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 dijkstra5
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 dijkstra6
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 dijkstra7
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 dijkstra8
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 dijkstra9
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 dijkstra10
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 dijkstra11
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 dijkstra12
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 dijkstra13
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
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
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) }