Я ищу алгоритм для объединения двух двоичных деревьев поиска произвольного размера и диапазона. Очевидный способ , которым я бы идти о реализации этого было бы найти целые поддерева чьих диапазона может поместиться в произвольный внешний узел в другом дереве. Однако наихудшее время выполнения для этого типа алгоритма, по-видимому, имеет порядок O(n+m)
где n
и m
размер каждого дерева соответственно.
Тем не менее, мне сказали, что это можно сделать там O(h)
, где h
высота дерева больше, чем высота. И я полностью потерян, как это возможно. Я попытался сначала поэкспериментировать с поворотом одного из деревьев, но поворот дерева в позвоночник - это уже O (h).
O(log n)
с помощью простой функции перемещения узла?n
. Только полные или полные двоичные деревья имеют высоту, логарифмическую по отношению к их общему количеству узлов.Ответы:
В ArXiv: 1002.4248 Джон Иаконо и Озгюр Озкан описывают относительно простой алгоритм объединения двух бинарных деревьев поиска за время амортизации ; анализ является сложной частью. [ Обновление: как правильно заметил Джо в своем ответе, этот алгоритм принадлежит Брауну и Тарьяну.] Они также описывают более сложную структуру данных словаря, основанную на смещенных списках пропусков, которая поддерживает слияния в O (O ( журнал2н ) амортизированноговремени.O ( журналн )
С другой стороны, оценка в худшем случае невозможна. Рассмотрим два двоичных дерева поиска с n узлами, одно из которых хранит четные целые числа от 2 до 2 n , а другое - нечетные целые числа от 1 до 2 n - 1 . Слияние двух деревьев создает новое двоичное дерево поиска, хранящее все целые числа между Ω ( nO ( журналн ) N 2 2n 1 2n−1 до 2 n . В любом таком дереве постоянная доля узлов имеет разную четность, чем их родители. (Доказательство: родитель нечетного листа должен быть четным.) Таким образом, объединение четного и нечетного деревьев требует изменения1 2n указатели.Ω(n)
источник
Вы можете найти эту ссылку полезной: Браун и Тарьян, Алгоритм быстрого слияния, в котором авторы показывают, как объединить сбалансированные двоичные (AVL) деревья в который является оптимальным (для алгоритмов сравнения). mиn- длины отсортированных списков, представленных деревьями двоичного поиска, и предполагается, чтоmO ( n logмN) м N .m ≥ n
Вы также можете увидеть обсуждение различных методов объединения упорядоченных наборов в разделе 11.5 этой статьи о деревьях поиска по пальцам.
источник
Вы можете объединить деревья за наихудшее времяO (1) , поддерживая при этом: вставку, удаление и поиск в O ( l o g н ) .
Бродал, Герт Стелтинг, Кристос Макрис и Костас Цихлас. «Чисто функциональные в худшем случае отсортированные списки с возможностью прокрутки по времени» . В материалах 14-й конференции по ежегодному европейскому симпозиуму - Том 14, 172–183. ESA'06. Лондон, Великобритания, Великобритания: Springer-Verlag, 2006. [ PDF ]
источник