Hali,
Csinalunk egy eljarast, ami a gyorsitotombbol "binaris keresessel"
(O(log n) idoben) megmondja ket tetszoleges szuffixrol, hogy mekkora a
leghosszabb egyezo prefixuk. (A tomb alapjan ket tetszoleges 2^k
hosszu substring egyenloseget el tudjuk donteni O(1) idoben.)
Ezutan ugyanazt csinaljuk, mint a naiv algonal, azaz minden poziciora
probalunk "noveszteni" egy paratlan hosszu palindromot, aminek az
adott pozicio a kozepe, illetve egy paros hosszut, aminek a kozepe az
adott pozicio utan van, csak most ehhez a fenti eljarast hasznaljuk
(mivel mindket esetben egy prefix es egy szuffix leghosszabb egyezo
szuffixerol illetve prefixerol van szo, es a string forditottjanak
onmaga utan fuzesevel eppen azt erjuk el, hogy a prefixeire is
"kerdezhetjuk" az eljarast).
Oke, ez a vege kicsit talan kodos lett.
Szoval egy L prefixrol es egy R szuffixrol kerdezzuk, hogy melyik az a
leghosszabb X string, ami R-nek prefixe, a forditottja pedig L-nek
szuffixe.
Amikor paros palindromot novesztunk, akkor S = L.R, a paratlan esetben
pedig egy karakterben atfednek.
Udv,
Mate
/*
Most vettem eszre, hogy sikerult nem a listara kuldenem a valaszt,
ugyhogy bocs, Gabor, hogy ketszer kapod meg. :D
Ja es koszi szepen linket! :)
*/
2009/9/20 Gábor Fehér <feher_g(a)freemail.hu>hu>:
Sziasztok,
megpróbáltam leprogramozni ezt az algoritmust, de elakadtam, és van
egy kérdésem.
Jól értettem, hogy visszavezettük a problémát egy leghosszabb
ismétlődő részstring keresésére? Például: ha "abcvucbaww"-ben keresünk
leghosszabb részpalindromot, akkor ehelyett "abcvucbaww$wwabcuvcba"
-ban keresünk leghosszabb ismétlődő részstringet? Ezzel az a
problémám, hogy így az eredmény "abc" vagy "cba" lesz a helyes
"zz"
helyett. Szóval valószínűleg rosszul értettem. Konkrétan az nem
világos, hogy mit csinálunk, amikor elkészült a "gyorsítótömbünk".
Viszont, lineáris időben is megoldható a probléma! Ezt állítólag négy
hónapig tartott kitalálni egy PhD hallgatónak, úhgyhogy nem jövőheti
feladatnak ajánlom, hanem belinkelem a megoldást:
http://www.akalin.cx/2007/11/28/finding-the-longest-palindromic-substring-i…
Ettől függetlenül szeretném megérteni Máté verzióját is!
Gábor