Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Dijkstra algoritmusa: legrövidebb utak

Hasonló előadás


Az előadások a következő témára: "Dijkstra algoritmusa: legrövidebb utak"— Előadás másolata:

1 Dijkstra algoritmusa: legrövidebb utak
2007. Május 7. Dijkstra algoritmusa: legrövidebb utak A probléma: Adott egy irányított vagy irányítatlan, súlyozott (élű) gráf, hogyan lehet megkeresni egy adott pontból egy másik pontba vezető legkisebb súlyú utat?

2 E. Dijkstra (1972 Turing díj győztese)
Dijkstra algoritmusa “Computer science is no more about computers than astronomy is about telescopes.” E. Dijkstra (1972 Turing díj győztese)

3 Legrövidebb utak Dijkstra algoritmus(1959): pl. www.mapquest.com
Gyorsabb algoritmusok 1990-től

4 Dijkstra algoritmusa Alapgondolat: mindig a legközelebbi (?) csúcsot választjuk Zöld: A csúcsnak még ideiglenes a címkéje Sárga: legkisebb ideiglenes címkéjű csúcs, akkor lesz piros, ha a szomszédjait frissítettük (update lépés (ez nem feltétel, csak várakozás!) Piros: A csúcs címkéje már nem változik Obtain a network, and use the same network to illustrate the shortest path problem for communication networks, the max flow problem, the minimum cost flow problem, and the multicommodity flow problem. This will be a very efficient way of introducing the four problems. (Perhaps under 10 minutes of class time.)

5 A kulcslépés a legrövidebb utakat megkereső Dijkstra algoritmusban
A d( ) jelöli a csúcs ideiglenes címkéjét, távolságát a kezdőcsúcstól. d(i) Az i. csúcs címkéje= az adott út hossza a kezdőcsúcstól. Ezt módosítjuk, ha találunk rövidebb utat C ij az i és j csúcsokat összekötő (i, j) él súlya (költsége) pred(j)= a j őse az adott úton Procedure Update(i) for MINDEN (i,j) élre do if d(j) > d(i) + cij then d(j) : = d(i) + cij és pred(j) : = i; Update(i) Ezt a Dijkstra algoritmusban használjuk.

6 PÉLDA: Update(7) Tegyük fel, hogy d(7) = 6 az 1-8-2-7 úton 9 5 3 1 8 2
11 8 8 1 8 2 7 3 4 6 7 Nincsen változás Legyen a 7 szomszédos a 9, 5, 3 csúcsokkal, melyeknek ideiglenes címkéi (1-től való távolságai) rendre 11, 9 és 8. Update(7) eredményképpen a 11-et javítjuk 8-ra, a 9-et 7-re, a 8 változatlan marad

7 Update-Megjegyzések a.) A címkék csak csökkenhetnek 1 8 2 7 9 5
3 4 6 9 5 11 Nincsen változás b.) Más lehetőség: szokás a pred(j) tömb helyett minden csúcsra egy LIST-át karbantartani, amely az adott csúcshoz vezető út csúcsait tartalmazza. A címke átállításakor a lista utolsó elemét töröljük, majd az új ős azonosítóját hozzáfűzzük.

8 Dijkstra elvi algoritmus
begin S : = {1} ; T = N – {1}; d(1) : = 0 és pred(1) : = 0; d(j) =  for j = 2 to n; update(1); while S  N do begin (csúcs kiválasztása) i ÎT az a csúcs, ami legközelebb van j-hez: d(i) = min {d(j) : j Î T}; S : = S È {i}; T: = T – {i}; Update(i) end;

9 Példa Dijkstra Algoritmusára (MIT)
4 2 4 2 2 1 2 3 1 1 6 4 2 3 3 5 Inicializálás: végtelenre állítjuk a címkéket, kivéve az induló csúcsot. Az ideiglenes címkék közül válasszuk a legkisebbet: 0 –val címkézzük, ez az 1 csúcs most (sárgával jelölve, szomszédjainak átcímkézése után lesz piros)

10 Update lépés (szükség esetén átcímkézés)
2 4 2 4 2 2 1 2 3 1 6 4 2 3 3 5 4 A kiválasztott csúcs szomszédjainak címkéit szükség szerint javítjuk, ti., ha az odavezető úton lévő súlyok összege az eddigi címkénél kisebb: a 2 és 3 csúcs címkéje emiatt 2 és 4 lesz.

11 Az ideiglenes címkék közül válasszuk ki a legkisebbet (sárga)
2 4 2 4 2 2 1 2 3 1 6 4 2 3 3 5 4 A kiválasztott csúcs mindig az előzőleg kiválasztott csúcs legkisebb címkéjű szomszédja.

12 Update lépés (átcímkézés)
6 2 4 2 4 2 2 1 2 3 1 6 4 2 3 3 5 4 4 3 A kiválasztott csúcs szomszédjaira: 3 csúcs címkéje megváltozik d(3)=4-ről d(3)=3-ra, tehát a 3-ba a 2 csúcson keresztül kell menni, a végtelen címkéjűek megkapják a most kiszámolt út hosszát címkének ( az átcímkézés után a sárga csúcsból piros lesz).

13 Az ideiglenes címkék közül válasszuk ki a legkisebbet (sárga)
2 6 4 2 4 2 2 1 2 3 1 6 4 2 3 3 5 3 4

14 Update (átcímkézés) 2 6 4 2 4 2 2 1 2 3 1 6 4 2 3 3 5 3 4 d(5) nem változott ( az átcímkézés után a sárga csúcsból piros lesz)

15 Az ideiglenes címkék közül válasszuk ki a legkisebbet (sárga)
2 6 4 2 4 2 2 1 2 3 1 6 4 2 3 3 5 3 4

16 Update (átcímkézés) 2 6 4 2 4 2 2 6 1 2 3 1 6 4 2 3 3 5 3 4 d(4) nem változott ( az átcímkézés után a sárga csúcsból piros lesz)

17 Az ideiglenes címkék közül válasszuk ki a legkisebbet (sárga)
2 6 4 2 4 2 2 1 2 3 6 1 6 4 2 3 3 5 3 4

18 Update (átcímkézés) 2 6 4 2 4 2 2 1 2 3 6 1 6 4 2 3 3 5 3 4 d(6) nem változott ( az átcímkézés után a sárga csúcsból piros lesz)

19 Az ideiglenes címkék közül válasszuk ki a legkisebbet (sárga)
2 6 4 2 4 2 2 1 2 3 6 1 6 4 2 3 3 5 3 4 Nincs változás, a kiválasztott sárgával jelölt csúcsból piros lesz

20 Az algoritmus vége 2 6 4 2 4 2 2 1 2 3 6 1 6 4 2 3 3 5 3 4 -Most már mindegyik csúcs állandó címkével rendelkezik. -A kiválasztott élek és végpontjaik FÁT adnak. - Fában két pont között vezető út egyértelmű, így az 1 csúcsból a többibe vezető legrövidebb út is.

21 Források: MIT : http://web.mit.edu/jorlin/www/15.082/Animations
Klostermayer lapja (fényképek, idézet) Klostermayer Erdős száma 2:)


Letölteni ppt "Dijkstra algoritmusa: legrövidebb utak"

Hasonló előadás


Google Hirdetések