Танго дерево - Tango tree

А танго дерево это тип двоичное дерево поиска предложено Эрик Д. Демейн, Дион Хармон, Джон Яконо, и Михай Пэтрацу в 2004 г.[1] Он назван в честь Буэнос айрес, из которых танго символично.

Это онлайн двоичное дерево поиска, которое достигает конкурентное соотношение относительно не в сети оптимальное двоичное дерево поиска, используя только дополнительные биты памяти на узел. Это улучшило предыдущее наиболее известное соотношение конкуренции, которое было .

Структура

Деревья танго работают путем разбиения двоичного дерева поиска на набор предпочтительные пути, которые сами хранятся во вспомогательных деревьях (поэтому дерево танго представлено как дерево деревьев).

Справочное дерево

Чтобы построить дерево танго, мы моделируем полный двоичное дерево поиска, называемое справочное дерево, которое представляет собой просто традиционное двоичное дерево поиска, содержащее все элементы. Это дерево никогда не появляется в реальной реализации, но является концептуальной основой следующих частей дерева танго.

В частности, высота справочного дерева ⌈log2(п+1) ⌉. Это равно длине самого длинного пути и, следовательно, размеру самого большого вспомогательного дерева. Разумно сохраняя вспомогательные деревья сбалансированный, высота вспомогательных деревьев может быть ограничена величиной О(журнал журнал п). Это источник гарантий производительности алгоритма.

Предпочтительные пути

Предпочтительные пути дерева. Предпочтительный дочерний элемент каждого узла - это его последний посещенный дочерний элемент.

Сначала мы определяем для каждого узла его предпочтительный ребенок, который неформально является последним посещенным дочерним элементом при традиционном поиске в дереве двоичного поиска. Более формально рассмотрим поддерево Т, основанный на п, с детьми л (слева) и р (верно). Мы установили р как предпочтительный ребенок п если последний доступ к узлу в Т находится в поддереве с корнем р, и л как предпочтительный ребенок в противном случае. Обратите внимание, что если последний доступ к узлу Т является п сам тогда л является предпочтительным потомком по определению.

Предпочтительный путь определяется, начиная с корня и следуя предпочтительным дочерним элементам до достижения конечного узла. Удаление узлов на этом пути разбивает оставшуюся часть дерева на несколько поддеревьев, и мы рекурсивный на каждом поддереве (формируя предпочтительный путь от его корня, который разбивает поддерево на несколько поддеревьев).

Вспомогательные деревья

Чтобы представить предпочтительный путь, мы сохраняем его узлы в сбалансированное двоичное дерево поиска, в частности красно-черное дерево. Для каждого нелистового узла п по предпочтительному пути п, у него есть нежелательный ребенок c, который является корнем нового вспомогательного дерева. Прикрепляем корень этого другого вспомогательного дерева (c) к п в п, связывая таким образом вспомогательные деревья вместе. Мы также увеличиваем вспомогательное дерево, сохраняя в каждом узле минимальную и максимальную глубину (то есть глубину в ссылочном дереве) узлов в поддереве под этим узлом.

Алгоритм

Поиск

Чтобы найти элемент в дереве танго, мы просто имитируем поиск в дереве ссылок. Мы начинаем с поиска предпочтительного пути, связанного с корнем, который моделируется путем поиска во вспомогательном дереве, соответствующем этому предпочтительному пути. Если вспомогательное дерево не содержит желаемого элемента, поиск завершается на родительском элементе корня поддерева, содержащего желаемый элемент (начало другого предпочтительного пути), поэтому мы просто продолжаем поиск этого предпочтительного пути во вспомогательном дереве. , и так далее.

Обновление

Чтобы сохранить структуру дерева танго (вспомогательные деревья соответствуют предпочтительным путям), мы должны выполнять некоторую работу по обновлению всякий раз, когда предпочтительные дочерние элементы меняются в результате поиска. Когда предпочтительный дочерний элемент изменяется, верхняя часть предпочтительного пути отделяется от нижней части (которая становится его собственным предпочтительным путем) и повторно присоединяется к другому предпочтительному пути (который становится новой нижней частью). Чтобы сделать это эффективно, мы определим резать и присоединиться операции над нашими вспомогательными деревьями.

Присоединиться

Наш присоединиться операция будет объединять два вспомогательных дерева, если у них есть свойство, что верхний узел одного (в ссылочном дереве) является дочерним по отношению к нижнему узлу другого (по сути, соответствующие предпочтительные пути могут быть объединены). Это будет работать на основе соединять операция красно-черных деревьев, которая объединяет два дерева при условии, что у них есть свойство, что все элементы одного меньше, чем все элементы другого, и расколоть, что делает наоборот. Обратите внимание, что в ссылочном дереве существуют два узла на верхнем пути, так что узел находится на нижнем пути тогда и только тогда, когда его ключ-значение находится между ними. Теперь, чтобы соединить нижний путь с верхним, мы просто расколоть верхний путь между этими двумя узлами, затем соединять два результирующих вспомогательных дерева по обе стороны от вспомогательного дерева нижнего пути, и у нас есть последнее, соединенное вспомогательное дерево.

Резать

Наш резать операция разбивает предпочтительный путь на две части в данном узле, верхнюю часть и нижнюю часть. Более формально он разделит вспомогательное дерево на два вспомогательных дерева, так что одно содержит все узлы на определенной глубине или выше в ссылочном дереве, а другое содержит все узлы ниже этой глубины. Как в присоединитьсяобратите внимание, что в верхней части есть два узла, которые ограничивают нижнюю часть. Таким образом, мы можем просто расколоть на каждом из этих двух узлов, чтобы разделить путь на три части, затем соединять две внешние, так что в итоге мы получим две части, верхнюю и нижнюю, по желанию.

Анализ

Чтобы ограничить коэффициент конкуренции для деревьев танго, мы должны найти нижнюю границу производительности оптимального автономного дерева, которое мы используем в качестве эталона. Как только мы найдем верхнюю границу производительности дерева танго, мы можем разделить их, чтобы ограничить конкурентоспособность.

Граница чередования

Чтобы найти нижнюю границу работы, выполняемой оптимальным автономным деревом двоичного поиска, мы снова используем понятие предпочтительных дочерних элементов. При рассмотрении последовательности доступа (последовательности поисков) мы отслеживаем, сколько раз предпочтительный дочерний узел ссылочного дерева переключается. Общее количество переключателей (суммированное по всем узлам) дает асимптотический нижняя граница работы, выполняемой любым алгоритмом двоичного дерева поиска для данной последовательности доступа. Это называется чередовать нижнюю границу.[1]

Танго дерево

Чтобы связать это с деревьями танго, мы найдем верхнюю границу работы, выполняемой деревом танго для данной последовательности доступа. Наша верхняя граница будет , куда k количество чередований.

Общая стоимость делится на две части: поиск элемента и обновление структуры дерева танго для поддержания правильных инвариантов (переключение предпочтительных дочерних элементов и изменение предпочтительных путей).

Поиск

Чтобы увидеть, что поиск (а не обновление) соответствует этой границе, просто обратите внимание, что каждый раз, когда поиск по вспомогательному дереву оказывается неудачным, и мы должны переходить к следующему вспомогательному дереву, что приводит к предпочтительному дочернему переключателю (поскольку родительский предпочтительный путь теперь переключает направления, чтобы присоединиться к предпочтительному дочернему пути). Поскольку все поиски по вспомогательному дереву безуспешны, кроме последнего (естественно, мы останавливаемся, когда поиск успешен), мы ищем вспомогательные деревья. Каждый поиск занимает , поскольку размер вспомогательного дерева ограничен , высота ссылочного дерева.

Обновление

Стоимость обновления также укладывается в эту границу, потому что нам нужно выполнить только одно резать и один присоединиться для каждого посещенного вспомогательного дерева. Один резать или же присоединиться операция требует только постоянного количества поисков, раскол, и соединяет, каждое из которых занимает логарифмическое время в размере вспомогательного дерева, поэтому наша стоимость обновления составляет .

Конкурентное соотношение

Танго деревья - это -конкурентоспособен, потому что работа, выполняемая оптимальным автономным деревом двоичного поиска, как минимум линейна по k (общее количество предпочтительных дочерних переключателей), а работа, выполняемая деревом танго, не превышает .

Смотрите также

Рекомендации

  1. ^ а б Demaine, E.D .; Harmon, D .; Iacono, J .; Патрашку, М. (2007). «Динамическая оптимальность - почти» (PDF). SIAM Журнал по вычислениям. 37 (1): 240. Дои:10.1137 / S0097539705447347.