Jump to content

Верхнее дерево

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

Верхнее дерево определяется для базового дерева и набор не более двух вершин, называемых внешними граничными вершинами

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

Глоссарий [ править ]

Граничный узел [ править ]

См. Граничная вершина.

Граничная вершина [ править ]

Вершина в связном поддереве является граничной вершиной, если она соединена ребром с вершиной вне поддерева.

Внешние граничные вершины [ править ]

До пары вершин в верхнем дереве могут называться внешними граничными вершинами, их можно рассматривать как граничные вершины кластера, который представляет все верхнее дерево.

Кластер [ править ]

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

Кластер путей [ править ]

Если содержит хотя бы одно ребро, тогда называется кластером путей .

Скопление точек [ править ]

См. кластер листьев.

Скопление листьев [ править ]

Если не содержит ребер, т.е. имеет только одну граничную вершину, тогда называется кластером листьев .

Граничный кластер [ править ]

Кластер, содержащий одно ребро, называется Edge Cluster .

Скопление краев листьев [ править ]

Лист в исходном кластере представлен кластером только с одной граничной вершиной и называется кластером ребер листа .

Кластер границ пути [ править ]

Краевые кластеры с двумя граничными узлами называются граничными кластерами пути .

Внутренний узел [ править ]

Узел в \ называется внутренним узлом

Путь к кластеру [ править ]

Путь между вершинами граничными называется кластера путем и это обозначается

Объединяемые кластеры [ править ]

Два кластера и имеет возможность слияния, если является одноэлементным набором (они имеют ровно один общий узел) и является кластером.

Введение [ править ]

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

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

В общем, дерево может иметь вес по краям.

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

Структура данных верхнего дерева может быть инициализирована в время.

Поэтому верхнее дерево над ( ) — бинарное дерево такое, что

  • Узлы представляют собой кластеры ( );
  • Листья являются краями
  • Родственные кластеры являются соседями в том смысле, что они пересекаются в одной вершине, а их родительский кластер является их объединением.
  • Корень это дерево сам по себе, с набором не более двух внешних граничных вершин.

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

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

Динамические операции [ править ]

Следующие три — это обновления леса, разрешенные пользователем.

  • Ссылка(v, w): Где и это вершины в разных деревьях 1 и 2 . Он возвращает одно верхнее дерево, представляющее v В
  • Cut(v, w) : удаляет край. с дерева с верхушкой дерева тем самым превратив его в два дерева в и w и возвращение двух верхних деревьев в и В .
  • Expose(S) : вызывается как подпрограмма для реализации большинства запросов к верхнему дереву. содержит не более 2 вершин. Он делает исходные внешние вершины нормальными вершинами и превращает вершины из новые внешние граничные вершины верхнего дерева. Если непусто, он возвращает новый корневой кластер с Expose({v,w}) терпит неудачу, если вершины принадлежат разным деревьям.

Внутренние операции [ править ]

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

The обновляется путем вызова определяемой пользователем функции, связанной с каждой внутренней операцией.

  • Объединить Здесь и являются объединяемыми кластерами , он возвращает в качестве родительского кластера и и с граничными вершинами в качестве граничных вершин Вычисляет с использованием и
  • Расколоть Здесь это корневой кластер Он обновляет и с использованием и чем он удаляет кластер от .

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

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

  • Создавать Создает кластер за край Наборы рассчитывается с нуля.
  • Искоренить это краевой кластер Пользовательская функция вызывается для обработки и чем кластер удаляется из верхнего дерева.

Нелокальный поиск [ править ]

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

Примеры нелокального поиска [ править ]

Нахождение i-го ребра на более длинном пути из к может быть сделано =Expose({v,w}), за которым следует Search( ) с соответствующим выбором . Для реализации Choose мы используем глобальную переменную, представляющую и глобальная переменная, представляющая Выбрать выбирает кластер с если и только если длина по крайней мере . Для поддержки операции длина должна поддерживаться в .

Аналогичную задачу можно сформулировать для графа с ребрами неединичной длины. В этом случае расстояние может относиться к ребру или вершине между двумя рёбрами. Мы могли бы определить Choose так, чтобы в последнем случае возвращалось ребро, ведущее к вершине. Можно определить обновление, увеличивающее длину всех ребер вдоль пути на константу. В таком сценарии эти обновления выполняются в постоянное время только в корневом кластере. Очистка необходима для распространения отложенного обновления среди детей. Clean следует вызывать до Choose вызова . Чтобы сохранить длину в в этом случае потребуется поддерживать единичную длину в также.

Нахождение центра дерева, содержащего вершину можно сделать, найдя либо бицентрическое ребро, либо ребро с центром в качестве одной конечной точки. Край можно найти с помощью =Expose({v}), за которым следует Search( ) с соответствующим выбором . Выбор выбирает между детьми с ребенок с более высоким максимальным расстоянием . Для поддержки операции максимальное расстояние в поддереве кластера от граничной вершины должно поддерживаться в . Это также требует поддержания длины пути кластера.

и приложения результаты Интересные

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

  • ([СЛИТОР И ТАРДЖАН 1983]). Мы можем поддерживать динамическую коллекцию взвешенных деревьев в время на соединение и разрез, поддерживая запросы о максимальном весе ребра между любыми двумя вершинами в время.
    • Схема доказательства: оно предполагает поддержание на каждом узле максимального веса (max_wt) на его пути к кластеру. Если это кластер точек, то max_wt( ) инициализируется как Когда кластер представляет собой объединение двух кластеров, это максимальное значение двух объединенных кластеров. Если нам нужно найти максимальную массу между и тогда мы делаем Разоблачать и сообщите max_wt
  • ([СЛИТОР И ТАРДЖАН 1983]). В сценарии вышеприведенного приложения мы также можем добавить общий вес ко всем ребрам на заданном пути · · · в время.
    • Схема доказательства: мы вводим вес, называемый extra( ), который будет добавлен ко всем ребрам в Который поддерживается надлежащим образом; расколоть( ) требует, чтобы для каждого дочернего элемента пути из мы устанавливаем max_wt(A) := max_wt( ) + дополнительно( ) и дополнительно( ) := дополнительно( ) + дополнительно( ). Для := присоединяюсь( ), мы устанавливаем max_wt( ) := max {max_wt( ), max_wt( )} и дополнительно( ) := 0. Наконец, чтобы найти максимальный вес на пути · · · мы устанавливаем := Разоблачить и верните max_wt( ).
  • ([ГОЛДБЕРГ И др., 1991]). Мы можем запросить максимальный вес в базовом дереве, содержащем данную вершину. в время.
    • Схема доказательства: для этого требуется сохранение дополнительной информации о ребре некластерного пути максимального веса в кластере при операциях слияния и разделения.
  • Расстояние между двумя вершинами и можно найти в время как длина(Expose ).
    • Схема доказательства: мы будем поддерживать длину длины ( ) пути кластера. Длина сохраняется как максимальный вес, за исключением того, что если создается путем соединения(Merge), length( ) — это сумма длин, хранящихся вместе с дочерними элементами пути.
  • Вопросы по диаметру дерева и последующему его уходу принимаются время.
  • Центр и Медиана могут поддерживаться с помощью операций Link(Merge) и Cut(Split) и запрашиваться с помощью нелокального поиска в время.
  • Верхние деревья используются в современных алгоритмах динамической двусторонней связности . В этой задаче, как и в случае с динамической связностью , граф подвержен удалениям и вставкам ребер, а также запросам, спрашивающим, соединена ли пара вершин двумя ребрами или существует ли мост, разделяющий их. Хольм , де Лихтенберг и Торуп [1] дать детерминированный алгоритм с амортизированным временем обновления , и время запроса. Последующая работа Холма , Ротенберга и Торупа улучшила это значение до амортизированного времени обновления. , также используя верхние деревья [2] [3]
  • Граф можно поддерживать, позволяя обновлять набор ребер и задавать запросы о связности вершин 2. Амортизированная сложность обновлений . Запросы можно было бы реализовать еще быстрее. Алгоритм не тривиален, использует космос. [4]
  • Верхние деревья можно использовать для сжатия деревьев способом, который никогда не будет намного хуже, чем сжатие DAG , но может быть экспоненциально лучше. [5]

Реализация [ править ]

Деревья вершин были реализованы различными способами, некоторые из них включают реализацию с использованием многоуровневого разделения (верхние деревья и алгоритмы динамических графов Джейкоб Холм и Кристиан де Лихтенберг. Технический отчет) и даже с использованием деревьев Слеатора-Тарьяна (обычно с амортизированными временными границами), Топологические деревья Фредериксона (с наихудшими временными границами) (Алструп и др. Поддержание информации в полностью динамических деревьях с верхними деревьями).

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

Использование многоуровневого секционирования [ править ]

Любое разбиение кластеров дерева может быть представлено деревом разделов кластера CPT. путем замены каждого кластера в дереве по краю. Если мы используем стратегию P для разделения тогда CPT будет CPT P Это делается рекурсивно, пока не останется только одно ребро.

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

Стратегия разделения важна при разделении дерева. в кластеры. Только осторожная стратегия гарантирует, что мы окажемся в высота многоуровневого раздела (и, следовательно, верхнего дерева).

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

Приведенная выше стратегия секционирования обеспечивает сохранение верхнего дерева в время.

См. также [ править ]

Ссылки [ править ]

  • Стивен Альструп, Джейкоб Холм, Кристиан Де Лихтенберг и Миккель Торуп , Поддержание информации в полностью динамических деревьях с верхними деревьями , Транзакции ACM в алгоритмах (TALG), Vol. 1 (2005), 243–264, дои : 10.1145/1103963.1103966
  • Стивен Альструп, Джейкоб Холм, Кристиан Де Лихтенберг и Миккель Торуп , Полилогарифмические детерминированные полностью динамические алгоритмы для связности, минимального остовного дерева, 2-ребра и двусвязности , Журнал ACM, Vol. 48, выпуск 4 (июль 2001 г.), 723–760, дои : 10.1145/502090.502095
  • Дональд Кнут . Искусство компьютерного программирования : фундаментальные алгоритмы , третье издание. Аддисон-Уэсли, 1997. ISBN   0-201-89683-4 . Раздел 2.3: Деревья, стр. 308–423.
  • Томас Х. Кормен , Чарльз Э. Лейзерсон , Рональд Л. Ривест и Клиффорд Стейн . Введение в алгоритмы , второе издание. MIT Press и McGraw-Hill, 2001. ISBN   0-262-03293-7 . Раздел 10.4: Представление деревьев с корнями, стр. 214–217. Главы 12–14 (Двоичные деревья поиска, красно-черные деревья, расширение структур данных), стр. 253–320.
  1. ^ Холм, Дж.; Де Лихтенберг, К.; Торуп, М. (2001). «Полилогарифмические детерминированные полностью динамические алгоритмы связности, минимального остовного дерева, 2-ребра и двусвязности». Журнал АКМ . 48 (4): 723. дои : 10.1145/502090.502095 . S2CID   7273552 .
  2. ^ Торуп, Миккель (2000), «Почти оптимальная полностью динамическая связность графов», Труды тридцать второго ежегодного симпозиума {ACM} по теории вычислений.
  3. ^ Холм, Джейкоб; Ротенберг, Ева; Торуп, Миккель (2018), «Динамический поиск мостов в Амортизированное время», Труды двадцать девятого ежегодного симпозиума {ACM-SIAM} по дискретным алгоритмам, {SODA} 2018 , doi : 10.1137/1.9781611975031.3 , S2CID   33964042
  4. ^ Холм, Дж.; Де Лихтенберг, К.; Торуп, М. (2001). «Полилогарифмические детерминированные полностью динамические алгоритмы связности, минимального остовного дерева, 2-ребра и двусвязности». Журнал АКМ . 48 (4): 723. дои : 10.1145/502090.502095 . S2CID   7273552 .
  5. ^ Билле, Филип; Гёрц, Инге Ли; Ландау, Гад М.; Вейманн, Орен (2015). «Сжатие деревьев с верхними деревьями». Инф. Вычислить . 243 : 166–177. arXiv : 1304.5702 . дои : 10.1016/j.ic.2014.12.012 .

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 56b8dadebe2e82fd07326538c98e2117__1717838940
URL1:https://arc.ask3.ru/arc/aa/56/17/56b8dadebe2e82fd07326538c98e2117.html
Заголовок, (Title) документа по адресу, URL1:
Top tree - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)