20.11.2012 Views

Kis-Benedek Ágnes Dinamikus programozás a gráfelméletben

Kis-Benedek Ágnes Dinamikus programozás a gráfelméletben

Kis-Benedek Ágnes Dinamikus programozás a gráfelméletben

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

8 1. FEJEZET. ÚTKERESÉSI PROBLÉMÁK<br />

a dij(k) = cij összefüggés. Ha k ≥ 1, akkor az első k pontot használó minimális<br />

út vagy megegyezik az első k − 1 pontot használóval, vagy az út során pontosan<br />

egyszer felhasználjuk a k-adik pontot is. (Kétszer biztosan nem térünk oda vissza,<br />

mivel a gráf nem tartalmaz negatív kört.) Ebből a megfigyelésből adódik a következő<br />

rekurzió a k ≥ 1 esetre:<br />

dij(k) = min{dij(k − 1), dik(k − 1) + dkj(k − 1)}.<br />

Az algoritmus egy lépése során kiszámoljuk dij(k)-t ∀ i, j ∈ V -re, ezt folytatjuk<br />

k-t 0-tól n-ig, és így megkapjuk a belső pontként csak az első k pontot használó utak<br />

értékét minden pontpárra, és egyre nagyobb k-kra. k = n esetén végül megkapjuk a<br />

feladat megoldását, mivel itt tulajdonképpen már nincs semmilyen megkötés az út<br />

belső pontjaira vonatkozólag.<br />

Az algoritmus futásideje O(n 3 ), mivel minden ij pontpárra (O(n 2 )), valamint<br />

minden k-ra (k = 1, . . . , n) meg kell határoznunk dij(k)-t, egy adott dij(k) értéke<br />

viszont az előzőek ismeretében már konstans sok művelettel elvégezhető.<br />

1.4. "Felfújt" konstrukció<br />

Egy tetszőleges G = (V, E) irányított gráfhoz elkészíthető egy aciklikus G ′ =<br />

(V ′ , E ′ ) bővített gráf, mely n darab pontosztályból áll, vagyis V ′ = V1∪· · ·∪Vn, ahol<br />

Vi = V , az élhalmaza pedig a következőképp néz ki: xiyi+1 ∈ E ′ , i ∈ {1, . . . , n − 1},<br />

ha xy ∈ E, azaz egy pontosztály valamely pontjából a nála eggyel nagyobb sorszámú<br />

pontosztály valamely pontjába pontosan akkor megy él, ha az eredeti G gráfban a<br />

nekik megfelelő pontok közt vezetett él.<br />

Az így konstruált G ′ gráf aciklikus lesz, mert az egyes pontosztályokon belül<br />

nem vezet él, és egy pontosztályból csak nála nagyobb sorszámú pontosztályokba<br />

juthatunk el. Egy topologikus sorrendet adnak a pontok pontosztályonként növekvő<br />

sorrendben felsorolva, tehát először V1, majd V2, . . . , végül Vn pontjai.<br />

Aciklikus digráfban adott s pontból a többi pontba úgy kaphatjuk meg a legrö-<br />

videbb utak egy F fenyőjét, hogy vesszük a µ(vi) függvényt, amely a maximum i<br />

élű séták minimális költségét jelöli, és ezt a pontok topologikus sorredjében dolgozva<br />

egy egyszerű rekurzió segítségével kaphatjuk j > i-re: µ(vj) = min{µ(vi) + c(vivj) :

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!