Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
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
Fontos megjegyzés 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.
4
Dijkstra algoritmus röviden 1/2
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.
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
Dijkstra algoritmus struktogram
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) SKIP d[v] ≔ d[u] + c(u,v) Helyreállít(Qmin) P[v] ≔ u 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
∞ ∞ ∞ ∞ ∞ ∞
9
Dijkstra algoritmus példa
∞ ∞ ∞ ∞ ∞ ∞
10
Dijkstra algoritmus példa
5 ∞ ∞ 3 ∞ 2
11
Dijkstra algoritmus példa
5 ∞ ∞ 3 ∞ 2
12
Dijkstra algoritmus példa
5 ∞ ∞ 3 ∞ 2
13
Dijkstra algoritmus példa
5 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 5 3 3 3 2
15
Dijkstra algoritmus példa
5 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 5 3 3 3 2
17
Dijkstra algoritmus példa
A helyzet ugyanaz, mint az előző csúcs esetén. 5 4 3 3 3 2
18
Dijkstra algoritmus példa
5 4 3 3 3 2
19
Dijkstra algoritmus példa
5 4 3 3 3 2
20
Dijkstra algoritmus példa
5 4 3 3 3 2
21
Dijkstra algoritmus példa
Legrövidebb utak feszítőfája 5 4 3 3 3 2
22
Felhasznált irodalom Fekete István jegyzet: Thomas, Cormen, Leiserson, Rivest: Új Algoritmusok. Scolar Kiadó, 2003
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.