Я смотрю на псевдокод, приведенный на рисунке 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]]
. Кажется ли это иметь смысл? Это ошибка в оригинальной бумаге? Если нет, может кто-нибудь объяснить мне, как я неправильно интерпретирую исходный код?