Строки: бор (26 апреля 2016)
- Бор.
- Способы хранения. Array, list, treeSet, hashSet, splaySet.
- Сортировка бором.
- Алгоритм Ахо-Корасик
- Определение суфф ссылок.
- Вычисление, как в префикс-функции. Порядок вычисления: bfs. Фиктивная вершина.
- Доказательство времени работы O(∑leni).
- Полный автомат: вычисление next[v,char], использование для получения суфф ссылок за O(1).
- Применение к поиску строки в тексте. Добавляем isEnd[v], доказываем, что всегда найдём строку.
--- Перерыв ---
- Суфф дерево
- Сжатый бор. Хранение. Информацию про ребро можно хранить от вершины.
- Суфф дерево за [T=O(n2), M=O(n)]
- Задача "поиск подстроки в тексте" за O(|s|) суфф деревом.
- Алгоритм Укконена построения суфф дерева в online
- Простая версия за [T=O(n2), M=O(n)]: храним указатели на концы суффиксов
- Суффиксы-листья растут сами
- Жизненный цикл суффикса (1) идёт по дереву, (2) разветвился, (3) саморастущий лист.
- Основная лемма: если суффикс неразветвился, то все более короткие тоже неразветвились
- Алгоритм: храним указатель на самый длинный не разветвившийся, пересчитываем его.
- Подсчёт суфф ссылки. Линейность времени работы.
- Тонкости реализации
- Фиктивная вершина помогает два раза: всегда есть суфф ссылка, всегда будет (1)-суффикс
- При создании новой суфф ссылки, может оказаться, вершина ещё не создана... но мы уже знаем её номер.
- ???
- Суфф массив ↔ суфф дерево
- Суфф массив + LCP → суфф дерево. O(n).
- Cуфф дерево → Суфф массив + LCP. O(n).