Izvedba algoritama sufiksnog stabla u funkcijskome ... - Zemris - FER
Izvedba algoritama sufiksnog stabla u funkcijskome ... - Zemris - FER
Izvedba algoritama sufiksnog stabla u funkcijskome ... - Zemris - FER
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
(a)<br />
(b)<br />
Slika 1: Sufiksno stablo za niz “banana$” (a) i isto stablo sa sufiksnim vezama (b).<br />
Primjerice:<br />
> suffixes t<br />
[(1,7),(2,7),(3,7),(4,7),(5,7),(6,7),(7,7)]<br />
Struktura <strong>stabla</strong>, a i mnoge druge strukture, kod funkcijskih se jezika, odnosno<br />
općenito kod deklarativnih jezika, uobičajeno predstavljaju rekurzivnom podatkovnom<br />
strukturom. Za strukturu <strong>sufiksnog</strong> <strong>stabla</strong> definirat ćemo u Haskellu poseban (rekurzivan)<br />
tip podataka:<br />
data STree = Leaf | Branch [(Label, STree)] deriving (Eq, Show)<br />
type Label = Suffix<br />
Definicija kazuje da je STree ili završni čvor (tipski konstruktor Leaf) ili unutarnji<br />
čvor (tipski konstruktor Branch). Kod unutarnjeg čvora pohranjujemo listu dvojki<br />
(Label,STree), gdje je Label oznaka brida (dvojka početne i završne pozicije podniza<br />
u slijedu) dok je STree podstablo do kojega brid vodi. Primjerice, sufiksnom stablu za<br />
niz “banana$”, prikazanom slikom 1 (a), odgovara sljedeća rekurzivna struktura:<br />
Branch [<br />
((7,7),Leaf),<br />
((2,2),Branch [<br />
((7,7),Leaf),<br />
((3,4),Branch [<br />
((7,7),Leaf),((5,7),Leaf)])]),<br />
((1,7),Leaf),<br />
((3,4),Branch [<br />
((7,7),Leaf),<br />
((5,7),Leaf)])]<br />
3