Строки-3, бор, Ахо-Корасик (21 апреля)
- Несжатый бор
- Хранение: массив, список,
map<int,int>
, unordered_map<int,int>
, Splay-дерево, читерский способ
- Сортировка строк
map<string, T>
- Сжатый бор. Суффиксное дерево.
- Хранение сжатого бора
- Построение суффиксного дерева за [Time=O(n2), Space=O(n)]
- Смысл суффиксного дерева: для каждой подстроки знаем длину, количество вхождений, самое левое вхождение, самое правое вхождение
- LCA в суфф.дереве = LCP суффиксов
- Суффиксный массив + LCP → суффиксное дерево за O(n)
- Суффиксный массив + LCP ← суффиксное дерево за O(n)
- Задача про поиск словарных слов в тексте (W = max|Si|, D = количество различных|Si|)
- Решение хешами (W*|T|, D*|T|, D ≤ 2sqrt(sumLen))
- Решение бором (W*|T|)
- Ахо-Корасик
- Определяем суффиксные ссылки, пример.
- Использование для проверки, лежит ли в тексте хотя бы одно словарное слово
- Использование для нахождения для каждого словарного слова "количества, сколько раз это слово лежит в тексте".
- Построение bfs-ом
- [не успеем] Ленивое построение