Level Ancestor problem
Задача о уровне предка (англ. "Level Ancestor problem") является задачей о превращении данного корневого дерева T в структуру данных, которая сможет определить предка любого узла на заданном расстоянии от корня дерева.
| Задача: |
| Дано корневое дерево c вершинами. Поступают запросы вида , для каждого из которых необходимо найти предка вершины , который находится на расстоянии от корня дерева . |
Наивная реализация
Используя обход в глубину посчитаем глубину каждой вершины дерева (это можно сделать за ), после чего можем из вершины подняться до необходимой глубины вершины , что так же в худшем случае работает за . Получили алгоритм за , где время ответа на запрос можно улучшить до c помощью предподсчета двоичных подъемов, но тогда и время предподсчета в наивной реализации (посчитать подъемы для всех вершин) ухудшится до .
Лестничный алгоритм
Этот алгоритм базируется на различных способах декомпозиции дерева (выберем heavy-light декомпозицию), из свойств этого разбиения следует, что подняться на любую высоту из вершины мы можем за . Данное разбиение можно строить за , что дает нам алгоритм за .