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.

4.6 KARAKTERSOROZATOK HASONLÓSÁGA 35<br />

ben, hogy xi-t és yj-t cserével alakítjuk egyezővé, és ennek költségéhez hozzáadjuk<br />

opt(i − 1, j − 1) értékét - ez esetleg 0 is lehet, ha xi = yj -, vagy utoljára egy<br />

beszúrásműveletet alkalmazunk X(i) és Y (j) egymásba alakításához, ekkor opt(i −<br />

1, j)-hez vagy opt(i, j − 1)-hez hozzáadódik egy karakter beszúrásának költsége.<br />

opt(i, j) = min{α(xi, yj) + opt(i − 1, j − 1), δ + opt(i − 1, j), δ + opt(i, j − 1)},<br />

i ≤ 1, j ≤ 1.<br />

A futásidő O(mn), mivel egy adott opt(i, j) számításához csak konstans meny-<br />

nyiségű összeadás és összehasonlítás szükséges.<br />

A megoldásokat fölépíthetjük visszafelé haladva is, ekkor legyen g(n, m) = 0,<br />

i < n, j < m esetén pedig az alábbi rekurziót használjuk: g(i, j) = min[α(x(i +<br />

1), y(j + 1)) + g(i + 1, j + 1), g(i, j + 1) + δ, g(i + 1, j) + δ]. A g(i, j) függvény<br />

tulajdonképpen az X = (xi, . . . , xn) és Y = (yj, . . . , ym) karaktersorozatokra oldja<br />

meg az egyezőségvizsgálatot.<br />

Ennek a problémának az érdekességét még az adja, hogy a két függvény kapc-<br />

solatát felhasználva a kézenfekvő n-szer m-es tömböt használó kitöltés helyett más,<br />

kisebb tárhelyigényű módon is megoldható a feladat.<br />

Az első észrevétel, hogy opt+g-ben az (i, j)-edik elem azt adja meg, hogy mennyi<br />

a megoldás költsége akkor, ha kikötjük (i, j)-edik elemet használatát, más szóval<br />

az optimális döntéssorozat során valamikor használnunk kell opt(i, j)-t opt(n, m)<br />

felépítéséhez.<br />

A második észrevétel, hogy ha opt + g-ben tetszőleges k mellett q az az index,<br />

ami minimalizálja opt(q, k) + g(q, k)-t, akkor (q, k)-n átmegy az optimális megoldás.<br />

Mivel egy adott opt(i, j) kiszámításához csak az opt(i−1, j−1), opt(i−1, j), illetve<br />

opt(i, j − 1) értékekre van szükségünk, ezért egy n-szer 2-es tömbben tárolhatjuk<br />

az eredményeket, mindig felülírva a már nem használandó oszlopot. g-re hasonló

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

Saved successfully!

Ooh no, something went wrong!