Jump to content

WAVL-дерево

WAVL-дерево
Тип Дерево
Изобретенный 2009
Изобретён Бернхард Хёплер, Сиддхартха Сен и Роберт Э. Тарьян
Временная сложность в обозначении большого О
Операция Средний Худший случай
Поиск
Вставлять
Удалить
Пространственная сложность
Космос

В информатике дерево WAVL или слабое дерево AVL — это самобалансирующееся двоичное дерево поиска . Деревья WAVL названы в честь деревьев AVL , другого типа сбалансированного дерева поиска, и тесно связаны как с деревьями AVL, так и с красно-черными деревьями , которые все попадают в общую структуру сбалансированных по рангу деревьев . Как и другие сбалансированные двоичные деревья поиска, деревья WAVL могут обрабатывать операции вставки, удаления и поиска за время O (log n ) на операцию. [ 1 ] [ 2 ]

Деревья WAVL спроектированы так, чтобы сочетать в себе некоторые из лучших свойств деревьев AVL и красно-черных деревьев. Одним из преимуществ деревьев AVL перед красно-черными деревьями является их более сбалансированный вид: они имеют максимальную высоту. (для дерева с n элементами данных, где золотое сечение ), тогда как красно-черные деревья имеют большую максимальную высоту, . Если дерево WAVL создается с использованием только вставок, без удалений, то оно имеет ту же небольшую границу высоты, что и дерево AVL. С другой стороны, красно-черные деревья имеют преимущество перед деревьями AVL в меньшей реструктуризации своих деревьев. В деревьях AVL каждое удаление может потребовать логарифмического количества операций вращения дерева , в то время как красно-черные деревья имеют более простые операции удаления, которые используют только постоянное количество операций вращения дерева. Деревья WAVL, как и красно-черные деревья, используют только постоянное количество вращений дерева, и это константа даже лучше, чем для красно-черных деревьев. [ 1 ] [ 2 ]

Деревья WAVL были представлены Хэуплером, Сеном и Тарджаном (2015) . Те же авторы также представили общий взгляд на деревья AVL, WAVL и красно-черные деревья как на типы деревьев со сбалансированным рангом. [ 2 ]

Структура сбалансированных деревьев по рангам

[ редактировать ]

Различные деревья двоичного поиска имеют разные алгоритмы вставки/удаления и алгоритмы балансировки, что затрудняет систематическое исследование. Авторы Haeupler, Sen & Tarjan (2015) представляют структуру сбалансированных деревьев по рангам для унификации изучения бинарного дерева поиска путем определения рангового двоичного дерева, и каждое бинарное дерево поиска сопровождается конкретными ограничениями, применяемыми к функции ранга. Обратите внимание, что фреймворк не определяет алгоритмы, в которых реализуются эти деревья.

Бинарное дерево ранга — это бинарное дерево, в котором каждому узлу x сопоставлен ранг r(x). По соглашению пустой узел имеет ранг -1. Для узла x, который не является корнем, разница в рангах равна , и такой узел называется i-дочерним, если разница рангов равна i. Узел имеет тип если разница в рангах его левого и правого дочерних элементов равна i и j (без учета порядка).

При этом мы можем определить дополнительные правила, соответствующие различным деревьям:

  • Правило AVL, соответствующее дереву AVL : каждый узел имеет тип 1,1 или 1,2.
  • Правило 2-3, которое соответствует бинаризованному дереву 2-3: каждый узел имеет тип 0,1 или 1,1, и ни один родитель 0-потомка не является 0-потомком.
  • Правило красного черного, соответствующее красно-черному дереву : все различия рангов равны 0 или 1, и ни один родитель 0-потомка не является 0-потомком. Обратите внимание, что правило «красное-черное» обобщает правило 2-3, допуская узел типа 0,0.

Пока что все эти правила симметричны для левого и правого узла. Нарушение такой симметрии приводит к появлению других правил:

  • Правило двух-трех с правым наклоном, которое соответствует бинаризованному дереву 2-3 с правым наклоном: каждый узел равен 1,1 или 0,1, ни один родитель 0-потомка не является 0-потомком, и ни один 0-потомок не является левый.
  • Правило двух-трех с левым наклоном, которое соответствует бинаризованному дереву 2-3 с левым наклоном: каждый узел равен 1,1 или 0,1, ни один родитель 0-потомка не является 0-потомком, и ни один 0-потомок не является верно.
  • Правило красно-черного наклона вправо, которое соответствует красно-черному дереву с наклоном Рефта: ни один родитель 0-потомка не является 0-потомком, и ни один 0-потомок узла 0,1 не остается.
  • Правило левого красно-черного дерева, которое соответствует левостороннему красно-черному дереву : все ранговые различия равны 0 или 1, ни один родитель 0-потомка не является 0-потомком, и ни один 0-потомок дерева 0,1 -узел прав.

Слабое дерево AVL определяется правилом слабого AVL:

  • Слабое правило AVL: все различия рангов равны 1 или 2, а все конечные узлы имеют ранг 0.

Обратите внимание, что слабое дерево AVL обобщает дерево AVL, допуская узел типа 2,2. Простое доказательство показывает, что слабое AVL-дерево можно раскрасить так, чтобы оно представляло собой красно-черное дерево. Таким образом, в некотором смысле слабое дерево AVL сочетает в себе свойства дерева AVL и красно-черного дерева.

Определение

[ редактировать ]

Как и в случае с двоичными деревьями поиска в более общем плане, дерево WAVL состоит из набора узлов двух типов: внутренних узлов и внешних узлов. Внутренний узел хранит элемент данных и связан со своим родителем (за исключением назначенного корневого узла, у которого нет родителя) и ровно с двумя дочерними элементами в дереве: левым дочерним элементом и правым дочерним элементом. Внешний узел не несет данных и имеет ссылку только на своего родителя в дереве. Эти узлы организованы таким образом, чтобы сформировать двоичное дерево, так что для любого внутреннего узла x родителями левого и правого дочернего узла x является сам x . Внешние узлы образуют листья дерева. [ 3 ] Элементы данных располагаются в дереве таким образом, что при неупорядоченном обходе дерева элементы данных перечисляются в отсортированном порядке. [ 4 ]

Что отличает деревья WAVL от других типов двоичных деревьев поиска, так это использование в них рангов . Это числа, связанные с каждым узлом, которые дают приблизительное расстояние от узла до его самого дальнего потомка-листа. В отличие от деревьев AVL, где ранги определяются как высоты узлов, ранги не всегда равны высотам в деревьях WAVL. Разница в рангах узла x определяется как разница между рангом родительского узла x и рангом x. Ряды должны соответствовать следующим свойствам: [ 1 ] [ 2 ]

  • Свойство внешнего узла: каждый внешний узел имеет ранг 0. [ 5 ]
  • Свойство различия рангов: если некорневой узел имеет ранг r , то ранг его родительского узла должен быть либо r + 1 , либо r + 2 . Другими словами, разница в рангах для любого некорневого узла равна 1 или 2. [ 1 ]
  • Свойство внутреннего узла: внутренний узел с двумя внешними дочерними узлами должен иметь ранг ровно 1.

Операции

[ редактировать ]

Идет поиск

[ редактировать ]

Поиск ключа k в дереве WAVL во многом аналогичен поиску в любой структуре данных сбалансированного двоичного дерева поиска. Начинается с корня дерева, а затем неоднократно сравнивается k с элементом данных, хранящимся в каждом узле на пути от корня, следуя по пути к левому дочернему узлу, когда k меньше значения в узле или вместо этого следуйте по пути к правому дочернему элементу, когда k больше значения в узле. Когда достигается узел со значением, равным k , или достигается внешний узел, поиск останавливается. [ 6 ]

Если поиск останавливается на внутреннем узле, ключ k найден. Если вместо этого поиск останавливается на внешнем узле, то позиция, куда был бы вставлен k (если бы он был вставлен), найдена. [ 6 ]

Вставка внутреннего узла с ключом k в дерево WAVL требует поиска k в дереве, заканчивающегося внешним узлом, затем замены этого внешнего узла новым внутренним узлом с двумя внешними дочерними элементами и, наконец, повторной балансировки дерева. . Этап ребалансировки может выполняться как сверху вниз, так и снизу вверх. [ 2 ] но восходящая версия ребалансировки наиболее точно соответствует деревьям AVL. [ 1 ] [ 2 ]

Ребалансировка снизу вверх начинается с рассмотрения разницы в рангах. между узлом (первоначально вновь вставленным узлом) и его родитель. Если родителя нет, баланс восстанавливается. До началась вставка, разница в рангах между родителем и узлом составляла 1 или 2, но эта разница уменьшена на 1, поскольку поддерево укорененный в узле стал выше. Если новая ранговая разница между родительский элемент и узел равны 1, баланс восстановлен. В противном случае, если родной брат, другой дочерний элемент родителя, имеет разность рангов 1 с родитель, повысить родительский - повысить его ранг, увеличив ранговые различия между ним и каждым из его детей - и продолжаем ребалансировка со старым родительским узлом в качестве нового узла.

Наконец, с разницей в рангах 0 и 2 для узла и родственного узла, один или две ротации дерева с соответствующими корректировками различий в рангах, может восстановить баланс. Промежуточным дочерним элементом узла является тот, у которого есть ключ между ключами узла и родителя. Если разница в рангах для этого дочерний и узел равен 2, поверните, чтобы переместить узел вверх в дереве и родительском вниз, затем понизьте родительский элемент – уменьшите его ранг, отрегулировав вокруг него разногласия - и баланс восстанавливается. В противном случае, поверните, чтобы переместить дочерний элемент вверх, а узел вниз, затем снова поверните, чтобы переместите ребенка вверх, а родителя вниз. Продвигайте ребенка, понижайте в должности узел и родительский узел, и баланс восстанавливается.

Таким образом, в целом процедура вставки состоит из поиска, создания постоянного числа новых узлов, логарифмического числа изменений ранга и постоянного количества вращений дерева. [ 1 ] [ 2 ]

Удаление

[ редактировать ]

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

Ребалансировка снизу вверх начинается с рассмотрения разницы в рангах. между узлом — первоначально узел, заменивший удаленный узел — и его родитель. Если родителя нет, баланс восстанавливается. До началось удаление, разница в рангах между родителем и узлом составила 1 или 2, но эта разница увеличилась на 1, поскольку поддерево корневой узел сократился. Если у родителя теперь есть два внешних дочерние элементы, свойство внутреннего узла нарушается, поскольку родительский имеет ранг 2. Родителя необходимо понизить и продолжить ребалансировку с родительским узлом, который является корнем слишком короткого поддерева.

Если у узла нет родителя, баланс восстанавливается. Если разница в рангах между узлом и родителем выросла с 1 до 2, баланс восстанавливается. В противном случае, если брат или сестра, другой ребенок родителя, имеет разницу в ранге с родителем 2, понизить родителя - уменьшить его ранг, уменьшив ранговые различия между ним и каждого из своих дочерних элементов - и продолжайте ребалансировку со старым родителем, как новый узел. В противном случае, если у двоих детей брата или сестры есть разница в рангах с братом на 2, понижает в должности родителя и родной узел и продолжить ребалансировку, используя старого родительского узла в качестве нового узла.

Наконец, с разницей в рангах 3 и 1 для узла и родственного узла, и с братом или сестрой, имеющим ребенка с разницей в рангах 1, одно или два дерева ротации с соответствующими корректировками различий в рангах могут восстановить баланс. Определите детей брата или сестры как племянницу и племянника, где ключ племянницы лежит между ключами родитель и брат, а ключа у племянника нет. Если разница в рангах между братом, сестрой и племянником равна 1, для перемещения вращайте повышение уровня родного брата и понижение родителя, повышение уровня брата и сестры и понижение в должности родителя один, по крайней мере, и два раза, если необходимо, чтобы избежать нарушения свойство внутреннего узла. В противном случае, при ранговой разнице между брат, сестра и племянник равны 1, поверните, чтобы переместить племянницу вверх и брата или сестру вниз, поверните еще раз, чтобы переместить племянницу вверх, а родителя вниз, продвинуть племянницу дважды, один раз понизить брата или сестру и дважды понизить родителя.

В целом удаление представляет собой поиск вниз, чтобы найти узел с внешним дочерним элементом, удаление постоянное количество новых узлов, логарифмическое количество изменений ранга, и постоянное количество вращений дерева.[1][2]

Имеет смысл сравнить результат удаления, которое приведет к ротации на нескольких уровнях в дереве AVL, с вращением и изменениями ранга, выполненными в дереве WAVL. На втором изображении узел со значением 12 был удален с последующим поворотом вправо и присвоением всем внешним узлам нулевого ранга.

Дерево Фибоначчи с рангами
Дерево Фибоначчи с рангами после удаления

Вычислительная сложность

[ редактировать ]

Каждый поиск, вставка или удаление в дереве WAVL включает в себя движение по одному пути в дереве и выполнение постоянного количества шагов для каждого узла пути. В дереве WAVL с n элементами, в которое были только вставлены, максимальная длина пути равна . Если могли произойти как вставки, так и удаления, максимальная длина пути равна . Следовательно, в любом случае наихудшее время для каждого поиска, вставки или удаления в дереве WAVL с n элементами данных равно O (log n ) .

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

[ редактировать ]

Деревья WAVL тесно связаны как с деревьями AVL , так и с красно-черными деревьями . Каждому дереву AVL могут быть присвоены ранги его узлам таким образом, чтобы оно превратилось в дерево WAVL. И каждое дерево WAVL может иметь узлы, окрашенные в красный и черный цвета (и его ранги переназначаются) таким образом, чтобы оно превратилось в красно-черное дерево. Однако некоторые деревья WAVL не происходят из деревьев AVL таким образом, а некоторые красно-черные деревья не происходят из деревьев WAVL таким образом.

Деревья АВЛ

[ редактировать ]

Дерево AVL — это своего рода сбалансированное двоичное дерево поиска, в котором два дочерних элемента каждого внутреннего узла должны иметь высоту, отличающуюся не более чем на единицу. [ 7 ] Высота внешнего узла равна нулю, а высота любого внутреннего узла всегда равна единице плюс максимальная высота двух его дочерних узлов. Таким образом, функция высоты дерева AVL подчиняется ограничениям дерева WAVL, и мы можем преобразовать любое дерево AVL в дерево WAVL, используя высоту каждого узла в качестве его ранга. [ 1 ] [ 2 ]

Ключевое различие между деревом AVL и деревом WAVL возникает, когда у узла есть два дочерних узла одинакового ранга или высоты. В AVL-дереве, если узел x имеет двух дочерних элементов одинаковой высоты h , то высота x должна быть ровно h + 1 . Напротив, в дереве WAVL, если узел x имеет двух дочерних узлов одинакового ранга r , то ранг узла x может быть либо r + 1 , либо r + 2 . Это связано с тем, что ранг не строго равен высоте в дереве WAVL. Эта большая гибкость в рангах также приводит к большей гибкости в структурах: некоторые деревья WAVL не могут быть преобразованы в деревья AVL даже путем изменения их рангов, поскольку они включают узлы, высота дочерних элементов которых отличается более чем на единицу. [ 2 ] Однако мы можем сказать, что все деревья AVL являются деревьями WAVL. Деревья AVL — это деревья WAVL без типа узла, который имеет обоих дочерних элементов с разницей рангов 2. [ 1 ]

Если дерево WAVL создается только с помощью операций вставки, то его структура будет такой же, как структура дерева AVL, созданного той же последовательностью вставки, а его ранги будут такими же, как ранги соответствующего дерева AVL. Только посредством операций удаления дерево WAVL может отличаться от дерева AVL. В частности, это означает, что дерево WAVL, созданное только посредством вставок, имеет высоту не более . [ 2 ]

Красно-черные деревья

[ редактировать ]

Красно -черное дерево — это сбалансированное двоичное дерево поиска, в котором каждый узел имеет цвет (красный или черный), удовлетворяющий следующим свойствам:

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

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

  • Ранг внешнего узла всегда равен 0, а ранг его родительского узла всегда равен 1.
  • Ранг любого некорневого узла равен либо рангу его родительского узла, либо рангу его родительского узла минус 1.
  • Никакие два последовательных ребра на любом пути корневого листа не имеют разности рангов 0.

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

Ранги узлов в WAVL-дереве можно преобразовать в систему рангов узлов, удовлетворяющую требованиям для красно-черных деревьев, путем деления каждого ранга на два и округления до ближайшего целого числа. [ 9 ] Благодаря этому преобразованию для каждого дерева WAVL существует допустимое красно-черное дерево с той же структурой. Потому что красно-черные деревья имеют максимальную высоту то же самое справедливо и для деревьев WAVL. [ 1 ] [ 2 ] Однако существуют красно-черные деревья, которым нельзя задать действительную функцию ранга дерева WAVL. [ 2 ]

Несмотря на то, что с точки зрения древовидной структуры деревья WAVL представляют собой частный случай красно-черных деревьев, их операции обновления различны. Вращение дерева, используемое в операциях обновления дерева WAVL, может вносить изменения, которые недопустимы в красно-черном дереве, поскольку они фактически вызовут перекрашивание больших поддеревьев красно-черного дерева, а не изменение цвета только для одного. путь в дереве. [ 2 ] Это позволяет деревьям WAVL выполнять меньше вращений дерева за одно удаление, в худшем случае, чем красно-черные деревья. [ 1 ] [ 2 ]

  1. ^ Перейти обратно: а б с д и ж г час я дж Гудрич, Майкл Т .; Тамассиа, Роберто (2015), «4.4 Слабые деревья AVL», Разработка и применение алгоритмов , Wiley, стр. 130–138 .
  2. ^ Перейти обратно: а б с д и ж г час я дж к л м н Хёплер, Бернхард; Сен, Сиддхартха; Тарьян, Роберт Э. (2015), «Сбалансированные по рангу деревья» (PDF) , Транзакции ACM в алгоритмах , 11 (4): Ст. 30, 26, дои : 10.1145/2689412 , МР   3361215 .
  3. ^ Гудрич и Тамассия (2015) , Раздел 2.3 Деревья, стр. 68–83.
  4. ^ Гудрич и Тамассия (2015) , Глава 3. Деревья двоичного поиска, стр. 89–114.
  5. ^ В этом мы следуем Goodrich & Tamassia (2015) . В версии, описанной Хэуплером, Сеном и Тарджаном (2015) , внешние узлы имеют ранг -1. Этот вариант практически не меняет работу деревьев WAVL, но вносит некоторые незначительные изменения в формулу преобразования деревьев WAVL в красно-черные деревья.
  6. ^ Перейти обратно: а б Гудрич и Тамассия (2015) , раздел 3.1.2 Поиск в двоичном дереве поиска, стр. 95–96.
  7. ^ Goodrich & Tamassia (2015) , Раздел 4.2 Деревья AVL, стр. 120–125.
  8. ^ Гудрич и Тамассия (2015) , Раздел 4.3 Красно-черные деревья, стр. 126–129.
  9. ^ В Haeupler, Sen & Tarjan (2015) преобразование выполняется путем округления в меньшую сторону, поскольку ранги внешних узлов равны -1, а не 0. Goodrich & Tamassia (2015) дают формулу, которая также округляет в меньшую сторону, но поскольку они используют ранг 0 для внешних узлов, их формула неправильно присваивает красно-черный ранг 0 внутренним узлам с рангом 1 WAVL.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 27844b460d68cddb75c7e5a0d6082fa7__1716658500
URL1:https://arc.ask3.ru/arc/aa/27/a7/27844b460d68cddb75c7e5a0d6082fa7.html
Заголовок, (Title) документа по адресу, URL1:
WAVL tree - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)