Dijkstra algoritmusa Gubicza József (GUJQAAI.ELTE)
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.
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.
d∞∞∞∞∞∞∞ π∕∕∕∕∕∕∕ Kész ∞ ∞∞ ∞ ∞ ∞∞ 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 =
d0∞∞∞∞∞∞ π∕∕∕∕∕∕∕ Kész ∞ 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 =
d05∞∞∞∞∞ π∕1∕∕∕∕∕ Kész ∞ ∞ ∞ ∞∞ 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 =
d058∞∞∞∞ π∕11∕∕∕∕ Kész ∞ ∞ ∞ ∞ 8 Ha végeztünk az összes szomszéd vizsgálatával…. s =
d058∞∞13∞ π∕11∕∕2∕ Kész ∞ 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 =
d0589∞13∞ π∕112∕2∕ Kész ∞ ∞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 =
d ∞ π∕11232∕ Kész ∞ 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 =
d ∞ π∕11234∕ Kész ∞ 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 =
d π∕ Kész 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 =
d π∕ Kész 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 =
d π∕ Kész Í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 =
d π∕ Kész 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 =