Upload
keene
View
17
Download
0
Embed Size (px)
DESCRIPTION
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. - PowerPoint PPT Presentation
Citation preview
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 aztmutatja, 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.
1 4
5
6
3
2
77
5
8
8
4
3
4
2
5
8
7
9
1 2 3 4 5 6 7
d ∞ ∞ ∞ ∞ ∞ ∞ ∞
π ∕ ∕ ∕ ∕ ∕ ∕ ∕
Kész 0 0 0 0 0 0 0
∞
∞ ∞
∞
∞
∞∞
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 =
1 4
5
6
3
2
77
5
8
8
4
3
4
2
5
8
7
9
1 2 3 4 5 6 7
d 0 ∞ ∞ ∞ ∞ ∞ ∞
π ∕ ∕ ∕ ∕ ∕ ∕ ∕
Kész 1 0 0 0 0 0 0
∞
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 =
1 4
5
6
3
2
77
5
8
8
4
3
4
2
5
8
7
9
1 2 3 4 5 6 7
d 0 5 ∞ ∞ ∞ ∞ ∞
π ∕ 1 ∕ ∕ ∕ ∕ ∕
Kész 1 0 0 0 0 0 0
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 =
1 4
5
6
3
2
77
5
8
8
4
3
4
2
5
8
7
9
1 2 3 4 5 6 7
d 0 5 8 ∞ ∞ ∞ ∞
π ∕ 1 1 ∕ ∕ ∕ ∕
Kész 1 0 0 0 0 0 0
5
0 ∞
∞
∞
∞8
Ha végeztünk az összes szomszéd vizsgálatával….
s =
1 4
5
6
3
2
77
5
8
8
4
3
4
2
5
8
7
9
1 2 3 4 5 6 7
d 0 5 8 ∞ ∞ 13 ∞
π ∕ 1 1 ∕ ∕ 2 ∕
Kész 1 1 0 0 0 0 0
5
0 ∞
13
∞
∞8
Iterálunk még egyet, alegkisebb 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 =
1 4
5
6
3
2
77
5
8
8
4
3
4
2
5
8
7
9
1 2 3 4 5 6 7
d 0 5 8 9 ∞ 13 ∞
π ∕ 1 1 2 ∕ 2 ∕
Kész 1 1 0 0 0 0 0
5
0 9
13
∞
∞8
Mivel a 3-as csúcsba érés nem javítana a költségen 5+7 < 8 => HAMIS, ígytovább iterálunk.
s =
1 4
5
6
3
2
77
5
8
8
4
3
4
2
5
8
7
9
1 2 3 4 5 6 7
d 0 5 8 9 12 13 ∞
π ∕ 1 1 2 3 2 ∕
Kész 1 1 1 0 0 0 0
5
0 9
13
∞
128
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 =
1 4
5
6
3
2
77
5
8
8
4
3
4
2
5
8
7
9
1 2 3 4 5 6 7
d 0 5 8 9 12 11 ∞
π ∕ 1 1 2 3 4 ∕
Kész 1 1 1 1 0 0 0
5
0 9
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 ígyfelülíródik!
s =
1 4
5
6
3
2
77
5
8
8
4
3
4
2
5
8
7
9
1 2 3 4 5 6 7
d 0 5 8 9 12 11 18
π ∕ 1 1 2 3 4 6
Kész 1 1 1 1 0 1 0
5
0 9
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 =
1 4
5
6
3
2
77
5
8
8
4
3
4
2
5
8
7
9
1 2 3 4 5 6 7
d 0 5 8 9 12 11 18
π ∕ 1 1 2 3 4 6
Kész 1 1 1 1 1 1 0
5
0 9
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 =
1 4
5
6
3
2
77
5
8
8
4
3
4
2
5
8
7
9
1 2 3 4 5 6 7
d 0 5 8 9 12 11 18
π ∕ 1 1 2 3 4 6
Kész 1 1 1 1 1 1 1
5
0 9
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 =
1 4
5
6
3
2
77
5
8
8
4
3
4
2
5
8
7
9
1 2 3 4 5 6 7
d 0 5 8 9 12 11 18
π ∕ 1 1 2 3 4 6
Kész 1 1 1 1 1 1 1
5
0 9
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 =