Вторая лекция
- LZSS
- Алгоритм сжатия текста, простейшая реализация
- Динамика для подсчета LCP, реализация за O(N2), O(N2) памяти
- Подсчет LCP за O(N2) с использованием Z-функции и O(N) памяти
- С точки зрения суф.дерева LCP = LCA
- Решение cуф.массивом: построили, нашли ближайший слева-справа за O(1) с предподсчетом O(N)
- LCP(любой пары суффиксов) считается бинпоиском с хешами за O(logN)
- А еще бинпоиском с хешами за O(Nlog2N) строится суф.массив.
- Простейшее 2D-дерево для N точек
- Сортим точки по X
- На массиве строим дерево отрезков сортированных массивов
- Build: for merge
- Get: поднимаемся снизу, бинпоиск
- Преимущества Get снизу перед Get сверху
- Структуры данных − корневая эвристика
- Разбиение исходного множества на куски по √ N
- Пример1: ближайший справа ноль и a[i]=1
- Пример2: orders --- maximize(l, r, up to x), getSum(l, r)
- Отолженные операции (разбиение множества запросов на куски по √ N )
- Пример: 2D-Count, Add point, Del point
- Идея про строки: max длина не более √ SumLen
- Идея про Split: можно делать reverse, код становится короче