Исправлено в оригинальной статье о суффиксных массивах?

Я смотрю на псевдокод, приведенный на рисунке 3 оригинальной статьи, в которой представлены массивы суффиксов "SUFFIX ARRAYS: НОВЫЙ МЕТОД ДЛЯ ON-LINE STRING ПОИСКИ" .

Я не могу понять логику для строк 4 и 5 (индексирование от 0). Строки читаются:

else if r < P или w r ≤ a Pos [N-1] + r, затем
L W ← N

W - это шаблон длины "P", который мы ищем, а r - lcp(A[pos[N-1]:], W). Проблема в том, что почти во всех случаях этот lcp будет меньше длины W. Этот условный смысл предназначен для обработки дела (я думаю), что шаблон лексикографически больше, чем лексикографически наибольший суффикс в массиве, но он не проверяет это вообще. С другой стороны, строки 2 и 3, проверка которых, если W меньше, чем лексикографически наименьший суффикс, кажется, имеет прекрасный смысл

, если l = P или w l ≤ a Pos [0] + l, тогда
L W ← 0

Я считаю, что исходные строки должны читать что-то вроде:

else if r < P и w r > a Pos [N-1] + r, затем
L W ← N

Единственный способ, которым W может быть больше A[pos[N-1]:], - это если он имеет lcp короче длины шаблона (в противном случае все W совпадают, и поэтому W не может быть больше, только меньше или равно тому, с чем мы делим lcp) И если символ после lcp больше в W, чем в A[pos[N-1]]. Кажется ли это иметь смысл? Это ошибка в оригинальной бумаге? Если нет, может кто-нибудь объяснить мне, как я неправильно интерпретирую исходный код?

Ответ 1

Я думаю, что вы правильно понимаете бумагу и на самом деле она имеет ошибку.

Рассмотрим следующий пример: пусть A = banana, W = nana. Тогда A[pos[N-1]:] = nana. Алгоритм устанавливает LW = N или даже сбой, хотя на самом деле он N-1.