Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaKlára Bakosné Megváltozta több, mint 10 éve
1
Dijkstra algoritmusa Gubicza József (GUJQAAI.ELTE)
2
Jellemzők Cél: Adott egyszerű gráfban a legrövidebb (vagy min. költségű) út meghatározása. Algoritmikus szinten: 3 tömb feltöltése; - d[1..n] a csúcsokhoz tartozó min. költségek ill. - π (parent) a csúcsokhoz tartozó szülők meghat. - a kész[1..n] segédtömb segítségével, amely azt mutatja, vizsgáltuk-e már az adott csúcsot. A gráf élcímkéi pozitív értékeket vehetnek fel, a csúcscímkék pozitív, ill. végtelent.
3
Az algoritmus A minimum keresés a d tömbbeli min. értékre vonatkozik a legkisebb költségű csúcs, ami még nincs kész.
4
1 4 5 6 3 2 7 7 5 8 8 4 3 4 2 5 8 7 9 1234567 d∞∞∞∞∞∞∞ π∕∕∕∕∕∕∕ Kész0000000 ∞ ∞∞ ∞ ∞ ∞∞ Kezdőállapot: minden csúcsot ∞-el címkézünk, szüleiket NIL- re állítjuk, valamint a Kész értékeket 0-kra, és kijelöljük a kezdőcsúcsot. s =
5
1 4 5 6 3 2 7 7 5 8 8 4 3 4 2 5 8 7 9 1234567 d0∞∞∞∞∞∞ π∕∕∕∕∕∕∕ Kész1000000 ∞ 0∞ ∞ ∞ ∞∞ A kezdőcsúcs értékét 0-ra állítjuk, így a FeltMinker(d[1..n], u, Kész[j] = 0) őt fogja megtalálni először. Ezt a csúcsot készre állítjuk. s =
6
1 4 5 6 3 2 7 7 5 8 8 4 3 4 2 5 8 7 9 1234567 d05∞∞∞∞∞ π∕1∕∕∕∕∕ Kész1000000 5 0∞ ∞ ∞ ∞∞ A csúcs minden szomszédjára megnézzük (amelyek még nincsenek Kész, 5 és 3), hogy: d[u] + c(u,v) < d[v] Tehát az él, javít e a költségen? Ha igen, d[v] = d[u] + c(u,v), ill. π[v] := u szülő jelölése s =
7
1 4 5 6 3 2 7 7 5 8 8 4 3 4 2 5 8 7 9 1234567 d058∞∞∞∞ π∕11∕∕∕∕ Kész1000000 5 0∞ ∞ ∞ ∞ 8 Ha végeztünk az összes szomszéd vizsgálatával…. s =
8
1 4 5 6 3 2 7 7 5 8 8 4 3 4 2 5 8 7 9 1234567 d058∞∞13∞ π∕11∕∕2∕ Kész1100000 5 0∞ 13 ∞ ∞8 Iterálunk még egyet, a legkisebb költségű még nem kész elem a 2-es csúcs (d. 5), még nem kész szomszédai: 6, 4, 3 s =
9
1 4 5 6 3 2 7 7 5 8 8 4 3 4 2 5 8 7 9 1234567 d0589∞13∞ π∕112∕2∕ Kész1100000 5 0 9 13 ∞ ∞8 Mivel a 3-as csúcsba érés nem javítana a költségen 5+7 HAMIS, így tovább iterálunk. s =
10
1 4 5 6 3 2 7 7 5 8 8 4 3 4 2 5 8 7 9 1234567 d05891213∞ π∕11232∕ Kész1110000 5 09 13 ∞ 12 8 A 3-as csúcs még nem kész szomszédai: 4, 5.. ezek közül csak az 5-össel érünk el javulást s =
11
1 4 5 6 3 2 7 7 5 8 8 4 3 4 2 5 8 7 9 1234567 d05891211∞ π∕11234∕ Kész1111000 5 09 11 ∞ 128 A 4-es csúcs javít a 6-os-ba érés költségén, és figyeljünk rá, hogy a 6-os szülője így felülíródik! s =
12
1 4 5 6 3 2 7 7 5 8 8 4 3 4 2 5 8 7 9 1234567 d0589121118 π∕112346 Kész1111010 5 09 11 18 128 Figyelem: A 6-os csúccsal folytatjuk! Neki kisebb a költsége a még nem kész csúcsok közül s =
13
1 4 5 6 3 2 7 7 5 8 8 4 3 4 2 5 8 7 9 1234567 d0589121118 π∕112346 Kész1111110 5 09 11 18 128 Most pedig az 5-ös csúcsot vesszük először, és látjuk, hogy a 7-es költségén ő nem javít… s =
14
1 4 5 6 3 2 7 7 5 8 8 4 3 4 2 5 8 7 9 1234567 d0589121118 π∕112346 Kész1111111 5 09 11 18 128 Így, az iteráció ráugrik az utolsó csúcsra, késznek jelöli. Mivel az összes csúcs kész van, az algoritmus leáll. s =
15
1 4 5 6 3 2 7 7 5 8 8 4 3 4 2 5 8 7 9 1234567 d0589121118 π∕112346 Kész1111111 5 09 11 18 128 Végül minden csúcsra megkapjuk, hogy mennyi a hozzá vezető minimális költségű út. (7-es 18, 5-ös 12) Megj.: a gráf irányításától eltekinthetünk ezen a szinten. s =
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.