Сведение задачи LCA к задаче RMQ — различия между версиями
(→Постановка задачи LCA) |
(→Препроцессинг) |
||
Строка 13: | Строка 13: | ||
\end{cases}</tex> | \end{cases}</tex> | ||
− | 2) | + | 2) Запустим обход в глубину из корня, который будет строить список посещений узлов. Глубина текущей вершины добавляется в список при входе в эту вершину, а также после каждого возвращения из её сына. |
+ | |||
+ | 3) Построим дерево отрезков с операцией взятие минимума на отрезке по полученному списку узлов. | ||
− | |||
=== Запрос === | === Запрос === | ||
Версия 07:28, 26 марта 2011
Содержание
Постановка задачи LCA
Определение: |
Наименьшим общим предком (least common ancestor) двух узлов | в корневом дереве называется узел который среди всех узлов, являющихся предками как узла так и имеет наибольшую глубину.
Пусть дано корневое дерево
На вход подаются запросы вида для каждого запроса требуется найти их наименьшего общего предка.Алгоритм
Препроцессинг
1) В каждом узле будет храниться глубина узла в корневом дереве
2) Запустим обход в глубину из корня, который будет строить список посещений узлов. Глубина текущей вершины добавляется в список при входе в эту вершину, а также после каждого возвращения из её сына.
3) Построим дерево отрезков с операцией взятие минимума на отрезке по полученному списку узлов.
Запрос
Сложность
Препроцессинг
Длина массива глубин будет равна
т.е. дерево отрезков будет построено за Таким образом, препроцессинг работает заЗапрос
Время выполнения запроса равно времени запроса минимального элемента на отрезке в дереве отрезков, т.е.
См.также
- Метод двоичного подъема
- Решение RMQ с помощью разреженной таблицы
- Алгоритм Фарака-Колтона и Бендера
- Сведение задачи RMQ к задаче LCA