Автоматы (17-е апреля 2019)
- Построение за O(n)
- Определение суффиксного автомата. Тривиальное построение - минимизация дерева.
- R(вершины) = Rs(строки). Вершина авотмата: Rs(v), ребро по букве z: Rs(v) → Rs(vz)
- Вершина автомата = пачка (отрезок) суффиксов.
- SA(s) → SA(sa): Rsa(v) = {xa | x ∈ Rs(v)} +? ε, где ε - пустая строка, а добавление идёт, если v - суффикс sa
- SA(s) → SA(sa): разобьётся на две не более чем одна вершина, которую можно найти в цепочке, next[last,a] → next[suf[last],a],→ next[suf[suf[last]],a], ..., где last=Rs(s).
- suf[x], len[x], собственно алгоритм
- Оценка времени работы и размера
- При цикле for: last → suf[last] → suf[suf[last]] → p уменьшается длина цепочки суфссылок
- При переходе p → q, длина цепочки суфссылок может только уменьшиться
- При цикле for: q → suf[q] → suf[suf[q]]... уменьшается длина цепочки суфссылок