Строки, бор и Ахо-Корасик (23 марта 2015)
- Хеши, префикс-функция
- Разбор задачи с VK-Cup, решение хешами
- Решаем задачу про привидение Петю префикс функцией
- Кодим задачу про привидение Петю и кубики хешами [code]
- Решаем задачу про текст и поиск словарных слов хешами
- Идея про то, что различных длин слов в словаре не более корня суммарной длины
- Разбор задачи про архиватор через LCP
- Бор
- Пишем задачу dictionary [code]
- Способы хранения бора
- Традиционные способы хранения
- Необычный способ хранения, O(N*(Sigma + L))
- Хранение Splay деревом
- Сортировка строк бором
- map<string, type> = бор
- Наибольший общий префикс двух строк из данного набора = LCA
- Пишем бор, пишем суффиксное дерево за квадрат
- Ахо-Корасик: ленивое написание (пишем getNext, getSuf)
- Ахо-Корасик: написание с помощью bfs
- Задачи на Ахо-Корасика
- Для каждого словароного слова определить, входит ли оно в текст
- Для каждого словароного слова посчитать количество вхождений в текст
- Для каждого словароного слова найти самое левое вхождение в текст
- Посчитать суммарное количество вхождений словарных слов в текст (количество пар "слово, позиция"). Текст online растёт.
- Для каждого словарного слова найти все вхождения в текст за O(|text|+answer). Текст online растёт.
- [не успеем] Найти минимальную по длине строку, которую можно прочитать двумя разными способами
- За ход можно выписать префикс любой из данных строк. Нужно за минимальное число ходов выписать весь текст.
- [не успеем] Поиск самой длинной подстроки словароного слова, входящей в текст.
- За ход можно выписать подстроку любой из данных строк. Нужно за минимальное число ходов выписать весь текст.