1 / 22

A Dijkstra algoritmus

A Dijkstra algoritmus. Mi az a Dijkstra algoritmus?. Egy gráfalgoritmus a „legrövidebb utak egy forrásból” probléma megoldására. Bemenet: egy G = (E,V) élsúlyozott véges gráf, valamint egy s ∈ V csúcs, a forrás. Az élek súlyozása nemnegatív. A gráf lehet irányított vagy irányítatlan.

magnar
Download Presentation

A Dijkstra algoritmus

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. A Dijkstra algoritmus

  2. Mi az a Dijkstra algoritmus? • Egy gráfalgoritmus a „legrövidebb utak egy forrásból” probléma megoldására. • Bemenet: egy G = (E,V) élsúlyozott véges gráf, valamint egy s ∈ V csúcs, a forrás. Az élek súlyozása nemnegatív. A gráf lehet irányított vagy irányítatlan. • Kimenet: a forrást és az onnan elérhető csúcsokat tartalmazó gráf, ami egyben a forrásból induló legrövidebb utak fája.

  3. A legrövidebb út alatt most nem a legkevesebb élt tartalmazó utat értjük, hanem azt az, amelyikre az alkotóélek súlyainak összege minimális. Fontos megjegyzés

  4. Minden lépésben tartsuk nyilván az összes csúcsra, a forrástól az illető csúcsba vezető, eddig talált legrövidebb utat. Ehhez tekintsünk egy d[1..n] és egy P[1..n] tömböt (n a csúcsok száma), melyek rendre a távolságokat és a szülő csúcsokat tartalmazzák. Jelölje K azoknak a csúcsoknak a halmazát, amelyekhez már kiszámítottuk az odavezető legrövidebb utat. Dijkstra algoritmus röviden 1/2

  5. Dijkstra algoritmus röviden 2/2 • Kezdetben a távolság a kezdőcsúcsra 0, a többire ∞. • Minden lépésben a nem kész csúcsok közül tekintsük valamelyik legkisebb távolságú (dmin) csúcsot (v): • Vegyük észre, hogy v távolsága a megelőző lépés eredményei és a v-be vezető imént érintett él alapján ismert, ezért v bekerül a K halmazba. • Számítsuk ki a v szomszédaira a v-be vezető útnak a v egyes szomszédaiba vezető élekkel kibővített hosszát (kiterjesztés). Amennyiben ez kisebb, mint az illető szomszédba eddig talált legrövidebb út, akkor mostantól ezt tekintjük az ebbe a csúcsba vezető legrövidebb útnak (közelítés).

  6. d[s], P[s] ≔ 0, NIL for all u ∊ V ∖ {s} d[u], P[u] ≔ ∞, NIL Üres(K); Üres(Qmin) Feltölt(Qmin) Qmin ≠ ∅ u ≔ Kivesz(Qmin) K ≔ K ∪ {u} for all v ∊ Szomszédok(u) ∖ K d[v] ≩ d[u] + c(u,v) d[v] ≔ d[u] + c(u,v) SKIP Helyreállít(Qmin) P[v] ≔ u Dijkstra algoritmus struktogram Qmin egy a még feldolgozásra váró csúcsokat tartalmazó minimum választó prioritásos sor. A sor kulcsai a már felfedezett legrövidebb távolságok.

  7. Dijkstra algoritmus példa ∞ ∞ ∞ ∞ ∞ ∞ ∞

  8. Dijkstra algoritmus példa ∞ 0 ∞ ∞ ∞ ∞ ∞

  9. Dijkstra algoritmus példa ∞ 0 ∞ ∞ ∞ ∞ ∞

  10. Dijkstra algoritmus példa 5 0 ∞ ∞ 3 ∞ 2

  11. Dijkstra algoritmus példa 5 0 ∞ ∞ 3 ∞ 2

  12. Dijkstra algoritmus példa 5 0 ∞ ∞ 3 ∞ 2

  13. Dijkstra algoritmus példa 5 0 5 3 3 3 2

  14. Dijkstra algoritmus példa A két lehetséges minimum távolságú csúcs közül ADS szinten teljesen mindegy, hogy melyik választjuk, de ADT szinten – a minimum kiválasztásos sor miatt – azt fogjuk választani, amelyiket korábban tettük be 5 0 5 3 3 3 2

  15. Dijkstra algoritmus példa 5 0 5 3 3 3 2

  16. Dijkstra algoritmus példa Az aktuálisan feldolgozott csúcs egyik szomszédja már kész, a másikhoz pedig már találtunk egy a jelenleginél rövidebb utat, a harmadiknál viszont az eddiginél egy rövidebb utat találtunk! 5 0 5 3 3 3 2

  17. Dijkstra algoritmus példa A helyzet ugyanaz, mint az előző csúcs esetén. 5 0 4 3 3 3 2

  18. Dijkstra algoritmus példa 5 0 4 3 3 3 2

  19. Dijkstra algoritmus példa 5 0 4 3 3 3 2

  20. Dijkstra algoritmus példa 5 0 4 3 3 3 2

  21. Dijkstra algoritmus példa Legrövidebb utak feszítőfája 5 0 4 3 3 3 2

  22. Felhasznált irodalom • Fekete István jegyzet: http://people.inf.elte.hu/fekete/docs_2/grafalg/grafalg.htm#dijkstra • Thomas, Cormen, Leiserson, Rivest: Új Algoritmusok. Scolar Kiadó, 2003 • http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm

More Related