Изменения

Перейти к: навигация, поиск

Суффиксный автомат

2587 байт добавлено, 20:33, 26 марта 2016
Применение
Построим суффиксный автомат для строки <tex>s</tex>.<br>
Каждой подстроке в суффиксном автомате соответствует путь, тогда ответ на задачу {{---}} количество различных путей из начальной вершины. Так как суфавтомат представляет собой ациклический граф, мы можем найти [[Задача_о_числе_путей_в_ациклическом_графе|количество путей в графе методом динамического программирования]].
===Наибольшая общая подстрока двух строк===
{{Задача
|definition=
Даны строки <tex>s</tex> и <tex>t</tex>. Требуется найти наибольшую общую подстроку двух строк.
}}
Построим суффиксный автомат для строки <tex>s</tex>.<br>
Пройдем по строке <tex>t</tex> и для текущего символа будем искать длину наибольшей общей подстроки, которая заканчивается в текущей позиции. Для этого будем поддерживать <tex>v</tex> {{---}} текущее состояние и <tex>l</tex> {{---}} текущую длину совпадающей части.<br>
Изначально <tex>v = 0</tex>, <tex>l = 0</tex> {{---}} совпадение пустое. Рассматриваем текущий символ <tex>t_i</tex>. Если в автомате существует переход из текущего состояния по данному символу, то перейдем в новое состояние и увеличим длину <tex>l</tex> на <tex>1</tex>.<br>Если перехода не существует, то попробуем минимально уменьшить длину совпадающей подстроки: перейдем по суффиксной ссылке из <tex>v</tex> в новое состояние и примем <tex>l = \mathrm{len(v)}</tex>. Повторим операцию до тех пор, пока не найдем переход. Если по суффиксным ссылкам мы дошли до состояния, в которое ведет суффиксная ссылка начальной вершины, то это значит, что символа <tex>t_i</tex> нет в строке <tex>s</tex>. В таком случае примем <tex>v = l = 0</tex>, после чего перейдем к следующему символу строки <tex>t</tex>.<br>
Длиной наибольшей общей подстроки будет <tex>maxPos</tex> {{---}} максимум из всех значений <tex>l</tex>, полученных в ходе работы алгоритма. Тогда ответом на задачу будет являться подстрока <tex>t[(maxPos - maxLen + 1) .. maxPos]</tex>, где <tex>maxPos</tex> {{---}} позиция, в которой достигнут максимум.
==Сравнение с другими суффиксными структурами==
188
правок

Навигация