a dijkstra algoritmus

22
A Dijkstra algoritmus

Upload: magnar

Post on 09-Jan-2016

47 views

Category:

Documents


2 download

DESCRIPTION

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. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: A Dijkstra algoritmus

A Dijkstra algoritmus

Page 2: 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.

● 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.

Page 3: A Dijkstra algoritmus

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.

Page 4: A Dijkstra algoritmus

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.

Page 5: A Dijkstra algoritmus

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

Page 6: A Dijkstra algoritmus

Dijkstra algoritmus struktogramd[s], P[s] 0, NIL≔

for all u V {s}∊ ∖d[u], P[u] ∞, NIL≔

Üres(K); Üres(Qmin

)Feltölt(Q

min)

Qmin ≠ ∅u Kivesz(Q≔

min)

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(Q

min)

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.

Page 7: A Dijkstra algoritmus

Dijkstra algoritmus példa

∞ ∞

Page 8: A Dijkstra algoritmus

Dijkstra algoritmus példa

0 ∞

Page 9: A Dijkstra algoritmus

Dijkstra algoritmus példa

0 ∞

Page 10: A Dijkstra algoritmus

Dijkstra algoritmus példa

3

5

0 ∞

2

Page 11: A Dijkstra algoritmus

Dijkstra algoritmus példa

3

5

0 ∞

2

Page 12: A Dijkstra algoritmus

Dijkstra algoritmus példa

3

5

0 ∞

2

Page 13: A Dijkstra algoritmus

Dijkstra algoritmus példa

3

5

3

0 5

2

3

Page 14: A Dijkstra algoritmus

Dijkstra algoritmus példa

3

5

3

0 5

2

3

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

Page 15: A Dijkstra algoritmus

Dijkstra algoritmus példa

3

5

3

0 5

2

3

Page 16: A Dijkstra algoritmus

Dijkstra algoritmus példa

3

5

3

0 5

2

3

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!

Page 17: A Dijkstra algoritmus

Dijkstra algoritmus példa

3

5

3

0 4

2

3

A helyzet ugyanaz, mint az előző csúcs esetén.

Page 18: A Dijkstra algoritmus

Dijkstra algoritmus példa

3

5

3

0 4

2

3

Page 19: A Dijkstra algoritmus

Dijkstra algoritmus példa

3

5

3

0 4

2

3

Page 20: A Dijkstra algoritmus

Dijkstra algoritmus példa

3

5

3

0 4

2

3

Page 21: A Dijkstra algoritmus

Dijkstra algoritmus példa

3

5

3

0 4

2

3

Legrövidebb utak feszítőfája

Page 22: A Dijkstra algoritmus

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