Алгоритмы на строках (СПБГУ МатМех, март 2013, спецкурс 344-й группы, лектор: Вова Смыкалов)
- Постановка простейшей задачи: найти одну строку внутри другой.
- Z-функция
- определение
- поиск подстроки в строке за O(n)
- алгоритм вычисления за O(n)
- доказательство времени работы
- код на 4 строчки
- решение задач
- период строки за O(n)
- количество различных подстрок строки за O(n2)
- Префикс-функция (Алгоритм Кнута - Морриса - Пратта)
- определение
- поиск подстроки в строке за O(n)
- алгоритм вычисления за O(n)
- доказательство времени работы
- код на 4 строчки
- решение задач
- период строки за O(n)
- количество различных подстрок строки за O(n2)
- Хеширование
- основная идея
- полиномиальный хеш
- как вычислить для всех префиксов
- пересчет для подстроки
- коллизия хешей, теорема про sqrt(M)
- какой выбирать модуль? P vs. 232 vs. 264
- построение antihash теста для 264
- Бор
- определение
- добавление строки s в бор за O(|s|)
- решение задачи "есть ли строка s в словаре" за O(|s|)
- Анонсы
- можно делать сжатый бор
- алгоритм Ахо-Корасика