Algorytmy tekstowe II

strict warning: Only variables should be passed by reference in /usr/share/drupal6/modules/book/book.module on line 559.

Najważniejszymi strukturami danych związanymi z tekstami są te, które dotyczą efektywnej reprezentacji zbioru wszystkich podsłów tekstu. Przed wszystkim interesuje nas to, żeby taka reprezentacja przyspieszała wyszukiwanie słów, a jednocześnie żeby była konstruowalna w czasie liniowym albo prawie liniowym (z dokładnością do logarytmów).

Oznaczmy przez \( Subwords(x) \) wszystkie podsłowa tekstu \( x \), a wszystkie wystąpienia (początkowe pozycje) słowa \( z \) w słowie \( x \) oznaczmy przez \( Occ(z,x) \). (Oznaczenie \( Occ \) jest skrótem od ang. occurrences).

Chcemy znaleźć taką reprezentację zbioru \( Subwords(x) \), by można było łatwo odpowiedzieć na pytanie, czy \( z\in Subwords(x) \), co jest równoważne \( Occ(z,x)\ne \emptyset \), jak również rozwiązywać inne problemy tekstowe. Poza tym chcemy, by rozmiar tej reprezentacji był liniowy, podczas gdy rozmiar \( Subwords(x) \) może być kwadratowy. Spośród wielu dobrych reprezentacji najbardziej znanymi są tablice sufiksowe (oznaczane przez \( SUF \)), drzewa sufiksowe i grafy podsłów (nie rozważane w tym module).