2014-10-09 9 views
11

Patrzę na pseudokod kodu podany na rysunku 3 oryginalnego papieru wprowadzającego tablice przyrostków "SUFFIX ARRAYS: A NEW METHOD FOR ON-LINE STRING SEARCHES".Errata w oryginalnym artykule na tablicach przyrostków?

Nie mogę określić logiki dla linii 4 i 5 (indeksowanie od 0). Linie brzmi:

else if R < P lub w R ≤ w Pos [n-1] + Rnastępnie
L W ← N

W to wzór długości "P", którego szukamy i r jest lcp(A[pos[N-1]:], W). Problem polega na tym, że prawie we wszystkich przypadkach ten numer lcp będzie mniejszy niż długość "W". Warunek ten ma za zadanie obsłużyć przypadek (chyba), że wzorzec jest leksykograficznie większy niż największy przyrostek leksykograficzny w tablicy, ale w ogóle go nie sprawdza. Linie 2 & 3, z drugiej strony, który to test, jeśli W jest mniejsza niż leksykograficznie najmniejszej sufiksu wydają się sens w

jeśli L = P lub w l Poz [0] + lnastępnie
L W ← 0

wierzę, że oryginalne linie powinny przeczytać coś takiego:

else if r < P i w r> a Pos [N-1 ] + rnastępnie
L W ← N

Jedynym sposobem W może być większa niż A[pos[N-1]:] jest, jeśli posiada ono lcp krótsza niż długość wzoru (inaczej, wszystkie W dopasowania i tak W nie może być większa, tylko mniejszy lub równy temu, z którym dzielimy się lcp) I jeśli znak po lcp jest większy w W niż w A[pos[N-1]]. Czy to ma sens? Czy jest to błąd w oryginalnym papierze? Jeśli nie, czy ktoś może mi wyjaśnić, jak błędnie interpretuję oryginalny kod?

Odpowiedz

3

Wydaje mi się, że rozumiesz, że dokument jest poprawny iw rzeczywistości zawiera błąd.

Weź pod uwagę następujący przykład: let A = banana, W = nana. Następnie A[pos[N-1]:] = nana. Algorytmy ustawia LW = N lub nawet się nie udają, podczas gdy w rzeczywistości jest to N-1.

Powiązane problemy