Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaBoglárka Gáspárné Megváltozta több, mint 10 éve
1
Prim algoritmusa Gubicza József (GUJQAAI.ELTE)
2
Jellemzők Cél: Adott egyszerű gráfban a min. költségű feszítőfa 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. A fő változás a Dijkstra algoritmushoz képest, hogy itt csak az adott él hosszát (ellenőrizzük) tároljuk le, nem pedig a d[u] –val vett összegét.
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: c(u,v) < d[v] Tehát az él, javít-e a költségen? Ha igen, d[v] = c(u,v) és π[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∞∞8∞ π∕11∕∕2∕ Kész1100000 5 0∞ 8 ∞ ∞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 d0584∞8∞ π∕112∕2∕ Kész1100000 5 0 4 8 ∞ ∞8 Mivel a 3-as csúcsba érés nem javítana a költségen 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 d0584∞8∞ π∕112∕2∕ Kész1101000 5 04 8 ∞ ∞8 Tovább iterálunk a 4-esre, és elkezdjük vizsgálni a 6, 5 csúcsokkal s =
11
1 4 5 6 3 2 7 7 5 8 8 4 3 4 2 5 8 7 9 1234567 d058452∞ π∕11244∕ Kész1101000 5 04 2 ∞ 5 8 A 6-os csúcs költségén javít, így a 6-os szülője mostantól ő lesz (felülírás!), ill. az 5-ös költségén is. s =
12
1 4 5 6 3 2 7 7 5 8 8 4 3 4 2 5 8 7 9 1234567 d058452∞ π∕11244∕ Kész1101010 5 04 2 ∞ 58 Tovább iterálunk a 6-osra, vizsgálandó szomszédai: 7, 5 s =
13
1 4 5 6 3 2 7 7 5 8 8 4 3 4 2 5 8 7 9 1234567 d0584527 π∕112446 Kész1101010 5 04 2 7 58 A 7-es költségén javít, azonban az 5-ösön nem, mivel 8<5 hamis. s =
14
1 4 5 6 3 2 7 7 5 8 8 4 3 4 2 5 8 7 9 1234567 d0584527 π∕112446 Kész1101110 5 04 2 7 58 Tovább iterálunk a 5-ösre, ami a 7-essel nem ér el javulást, többre nem is vizsgáljuk. s =
15
1 4 5 6 3 2 7 7 5 8 8 4 3 4 2 5 8 7 9 1234567 d0584527 π∕112446 Kész1101111 5 04 2 7 58 A 7-esen nincs mit vizsgálni, csak készre jelöljük. s =
16
1 4 5 6 3 2 7 7 5 8 8 4 3 4 2 5 8 7 9 1234567 d0584527 π∕112446 Kész1111111 5 04 2 7 58 Tovább iterálunk a 3-asra, készre jelöljük, és mivel nincs nem kész szomszédja, így… s =
17
1 4 5 6 3 2 7 7 5 8 8 4 3 4 2 5 8 7 9 1234567 d0584527 π∕112446 Kész1111111 5 04 2 7 58..végeztünk. Ezzel megkaptuk eredményül a min. költségű feszítőfát a gráfunkban. s =
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.