День 5. Строки: суффиксный массив
- Построение суффиксного массива
- Определение суффиксного массива (сортированный массив циклических сдвигов). Хранение в памяти: O(n).
- Сравнение строк хешами на больше-меньше и построение суффиксного массива за O(nlog2n)
- Построение суффиксного массива цифровой сортировкой за O(n2)
- Построение суффиксного массива цифровой сортировкой с удвоением за O(nlogn)
- Суффиксы ⇔ циклические сдвиги
- LCP
- Определение, полный предподсчёт за O(n2)
- Вычисление хешами LCP(i, j) за O(logn)
- Вычисление LCP всех соседних за O(n): алгоритм Касаи
- Вычисление LCP произвольных за O(1): RMQ за O(1)
- Задачи
- Поиск подстроки в тексте. Предподсчёт от текста. Ответ на запрос за O(|s|log|T|)
- А теперь O(|s| + log|s|log|T|) и даже за O(|s| + log|T|)
- Количество вхождений строки
- Количество различных подстрок
- Общая подстрока 2 строк (k строк).