Level Ancestor problem — различия между версиями
Romech (обсуждение | вклад) |
|||
Строка 3: | Строка 3: | ||
|definition = Дано корневое дерево <tex>T</tex> c <tex>n</tex> вершинами. Поступают запросы вида <tex>(v, k)</tex>, для каждого из которых необходимо найти предка вершины <tex>v</tex>, который находится на расстоянии <tex>k</tex> от корня дерева <tex>T</tex>. | |definition = Дано корневое дерево <tex>T</tex> c <tex>n</tex> вершинами. Поступают запросы вида <tex>(v, k)</tex>, для каждого из которых необходимо найти предка вершины <tex>v</tex>, который находится на расстоянии <tex>k</tex> от корня дерева <tex>T</tex>. | ||
}} | }} | ||
+ | == Наивная реализация == | ||
+ | Используя обход в глубину посчитаем глубину каждой вершины дерева (это можно сделать за <tex>O(n)</tex>), после чего можем из вершины <tex>v</tex> подняться до необходимой глубины вершины <tex>k</tex>, что так же в худшем случае работает за <tex>O(n)</tex>. Получили алгоритм за <tex><O(n),O(n)></tex>, где время ответа на запрос можно улучшить до <tex>O(\log n)</tex> c помощью предподсчета двоичных подъемов, но тогда и время предподсчета в наивной реализации (посчитать подъемы для всех) ухудшится до <tex><O(n \log n),O(\log n)></tex>. | ||
+ | == Лестничный алгоритм == |
Версия 21:54, 6 мая 2019
Задача о уровне предка - (англ. "Level Ancestor problem") является задачей о превращении данного корневого дерева T в структуру данных, которая сможет определить предка любого узла на заданном расстоянии от корня дерева.
Задача: |
Дано корневое дерево | c вершинами. Поступают запросы вида , для каждого из которых необходимо найти предка вершины , который находится на расстоянии от корня дерева .
Наивная реализация
Используя обход в глубину посчитаем глубину каждой вершины дерева (это можно сделать за
), после чего можем из вершины подняться до необходимой глубины вершины , что так же в худшем случае работает за . Получили алгоритм за , где время ответа на запрос можно улучшить до c помощью предподсчета двоичных подъемов, но тогда и время предподсчета в наивной реализации (посчитать подъемы для всех) ухудшится до .