|
Кружок обучения мастерству программирования при СПбГУ |
Лекции группы A0 - Лекция 09 - Минимумы + Квадродерево (Сергей Копелиович)
Note: Звездочкой отмечены темы, на которые на лекции времени не хватило.
Краткий план лекции "Минимумы + Квадродерево"
- Квадро-дерево (modify rectangle in O(sqrt(N))) time
- Min на отрезке массива (за O(1))
- Min на путях дерева (массив = частный случай дерева!) (за O(log*n) в offline)
- Другие задачи про деревья
Полный план лекции
- Квадро-дерево
- На квадрате NxN запрос за O(n)
- На плоскости есть N точек. O(NlogN) памяти, O(sqrt(N)) на запрос.
- Квадро-дерево поддерживает операцию {+= на прямоугольнике}
- Min на отрезке массива
- Sparse table [O(nlogn), O(1)]
- RMQ --> LCA --> RMQ+-1 --> [O(n), O(1)]
- Offline метод в случае только увеличивающихся L и R : [O(n+m)]
- Offline метод с СНМ : [O((n+m)*)]
- Min на путях дерева (массив = частный случай дерева!)
- Покрытие дерева путями: [O(n), O((logn)^2)], SplayTree=[O(n), O(logn)]
- Двоичный подъем: [O(nlogn), O(logn]
- Offline алгоритмы
- Обход дерева dfs-ом от корня: знаем глубину + умеем прыгать => [O(n), O(logn)]
- Подъем на 2^k из каждой вершины + Sparse table => [O(nlogn), O(1)]
- Online версия Sparse Table = [O(nlogn), O(logn)]
- Разбиваем дерево на слои, получаем дерево из O(n/logn) вершин => [O(n), O(logn)], [O(n), O(log*n)]
- Метод с СНМ - реализация снизу [O(n), O(logn)]
- Метод с СНМ - реализация cверху [O(n), O(logn)]
- Другие задачи про деревья
- Проверка - является ли остов минимальным [O(E)]
- Рандомизированный алгоритм поиска MST [O(E)]