Строки-4, Укконен, суффиксный автомат (22 апреля)
- Алгоритм Укконена
- Общая модель online-алгоритма: строка растёт, суффиксы растут
- Бесконечно растущий лист
- Основная тема: если суффикс разветвился, то все более длинные тоже разветвились
- Схема алгоритма: у нас есть указатель на самый длинный неразветвившийся суффикс, дописываем в конец строки один символ, указатель или спустится вниз, или перейдёт по суффиксной ссылке
- Чтобы алгоритм работал за линию достаточно быстро считать суффиксные ссылки
- Алгоритм подсчёта ссылок такой же, как в дереве палиндромов
- Доказательство линейности времени: потенциал − количество вершин на пути до корня
- Суффиксный автомат: общие слова
- Детерменированный автомат. Автомат, который принимает суффиксы строки. Минимальность.
- Делаем из суффиксного дерева суффиксный автомат − сжимаем одинаковые поддеревья.
- Принципиальное преимущества над суффиксным деревом: суффиксный автомат в несжатом виде имеет не более 2n вершин.
- Суффиксный автомат: алгоритм построения
- По каждой подстроке исходной мы из стартовой перейдём в некую вершину. Для каких подстрок мы перейдём в одну и ту же вершину? Правые контексты.
- Построение суффиксного автомата − online алгоритм. Пусть уже есть автомат для строки w, построим автомат для строки wa, какие правые контексты поменялись? Окажется, что изменений в среднем O(1).
- Леммы
- R(v) = R(u), |u| ≤ |v| ⇒ u − суффикс v
- u − суффикс v, R(v) ⊂ R(u)
- [не успеем] Rwa(v) = Rw(v)a + возможно пустая строка
- [не успеем] Если к R(v) добавилась пустая строка, то v − суффикс wa.
- [не успеем] ∃ самый длинный суффикс z, который встречался ранее.