Алгоритм Шибера-Вишкина — различия между версиями
Строка 27: | Строка 27: | ||
}} | }} | ||
− | Покроем дерево путями. А именно, сопоставим каждой вершине <tex>v</tex> число <tex>\operatorname{ | + | Покроем дерево путями. А именно, сопоставим каждой вершине <tex>v</tex> число <tex>\operatorname{inlabel} v</tex> такое, что прообраз каждого <tex>\operatorname{inlabel} v</tex> в <tex>T</tex> связен и является простым путем от какой-то вершины вниз до листа. |
{{Утверждение | {{Утверждение | ||
− | |statement=В качестве <tex>\operatorname{ | + | |statement=В качестве <tex>\operatorname{inlabel} v</tex> можно выбрать <tex>\operatorname{order} u</tex>, кратное максимальной степени двойки, где <tex>u \in S(v)</tex>. |
|proof=? | |proof=? | ||
}} | }} |
Версия 17:24, 21 июня 2012
Алгоритм Шибера-Вишкина применяется для нахождения наименьшего общего предка двух вершин в дереве. Он использует
времени на подготовку и затем отвечает на каждый запрос за .Идея алгоритма
Основная идея алгоритма следующая.
- Если бы дерево, в котором нужно искать было бы цепочкой, можно было бы найти просто взяв ту вершину, которая находится в дереве выше.
- Если дерево — полное двоичное дерево высоты , то можно сопоставить каждой вершине битовый вектор длиной (целое число от до ) и с помощью битовых операций над этими векторами найти
Тогда, представив данное дерево как полное двоичное дерево, в каждой вершине которого находится цепочка, можно научиться искать
в нем за .Подготовка
Перенумеруем вершины в порядке префиксного обхода дерева: сначала обходится текущая вершина, затем — поддеревья. Пусть
— такой порядок обхода.Обозначим за
количество вершин в поддереве вершины . Здесь и далее считаем, что вершина является и своим предком, и своим потомком.Утверждение: |
Пусть — вершина из поддерева . Тогда
|
По определению , вершин из поддерева образуют отрезок натуральных чисел длиной . Так как этот отрезок начинается с , то — отрезок . |
Покроем дерево путями. А именно, сопоставим каждой вершине
число такое, что прообраз каждого в связен и является простым путем от какой-то вершины вниз до листа.Утверждение: |
В качестве можно выбрать , кратное максимальной степени двойки, где . |
? |
Обработка запроса
Пусть
, — вершины в исходном дереве которых необходимо найти. Если , то они принадлежат одному простому пути, а следовательно ответом на запрос является , если , и , в противном случае. Теперь рассмотрим случай, когда , то есть и принадлежат разным простым путям.