2-3-4 –ДЕРЕВЬЯ

Существует еще одна разновидность сбалансированных деревьев, аналогичных по алгоритмам вставки и удаления элементов 2-3-деревьям. Это 2-3-4 – деревья.

В отличие от 2-3 –деревьев, 2-3-4- деревья допускают хранение в узлах данных. Кроме того, узлы имеют от 2-х до 4-х сыновей. Данные, хранящиеся в узлах, служат границами, разделяющими значения ключей в поддеревьях узлов.

12

 

4 18 22

0 24 26

В 2-3-4 – дереве узлы обладают еще большей гибкостью, чем в 2-3- дереве и соответственно количество разделений и слияний узлов в нем меньше, благодаря наличию 4-узлов.

Алгоритм поиска ничем не отличается от поиска в 2-3- дереве кроме того, что здесь в 4-узлах рассматриваются 4 интервала ключей для выбора одного из сыновей для последующего поиска. Поиск может закончится на любом узле, а не только на листе, как в 2-3- дереве.

Алгоритмы вставки и удаления также аналогичны 2-3- деревьям . Они обеспечивают полную сбалансированность дерева. Если поиск при вставке заканчивается на 2-узле, то он преобразуется в 3-узел. Если это 3-узел, то он преобразуется в 4-узел. Если элемент вставляется в 4-узел, то он разделяется на два 2-узла, при этом средний элемент передается родительскому узлу. Если родительский узел тоже 4-узел, то он также разделяется на два 2-узла. Этот процесс

может распространиться вплоть до корня дерева. Если корень дерева также 4-узел, то он разделяется на два 2-узла и образуется новый корень – 2-узел, к которому присоединены два 2-узла, полученные при разделении бывшего корня. Таким образом точкой роста 2-3-4- дерева является корень дерева.

НЕ нашли? Не то? Что вы ищете?

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

2-узел 3-узел 3-узел 4-узел

4-узел 4-узел

 

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

Когда корень дерева является 4-узлом, то при вставке любого элемента он автоматически разделяется и образуется новый 2-узел, который становится корнем дерева.

Пример построения 2-3-4- дерева:

1

18

18 7

 

4 19

 

 

18

 

 

Поскольку 4-узлы разделяются на пути от вершины вниз, эти деревья называются нисходящими 2-3-4- деревьями.

Максимальная высота 2-3-4- дерева h=(log2n+1), и вставка нового элемента, как правило, не изменяет ее за исключением случая, когда разделяется корень дерева.

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

До сих пор не удалось точно проанализировать аналитически производительность

2-3-4 – деревьев. Но эмпирически показано, что для балансировки 2-3-4 – деревьев используется очень мало разделений. Худший случай 2-3-4 – дерева оценивается высотой log2n, но на практике высота не приближается к этому значению.

К сожалению, реализация 2-3-4 – дерева довольно громоздка: накладные расходы, связанные с манипулированием сложными структурами узлов, рассмотрением различных сочетаний 2-, 3- и 4-узлов делают алгоритмы более медленными по сравнению с BST –деревьями.

Красно-черные деревья избавлены от этих недостатков. Они основываются на модели

2-3-4 – дерева, но используют только 2-узлы.

КРАСНО–ЧЕРНЫЕ ДЕРЕВЬЯ (RB - ДЕРЕВЬЯ)

Алгоритм вставки с нисходящим разделением прост для понимания, но реализация его громоздка.

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

RB – деревья можно считать 2-3-4 – деревьями, но 3- и 4-узлы в нем представлены абстрактно, с помощью эквивалентных групп 2-узлов.

4-узел можно представить в виде группы из трех 2-узлов.

 

Чтобы выделить эту группу в качестве 4-узла в дереве, пометим связи внутри группы цветом, например, красным.

3-узел можно представить в виде пары узлов, ориентированной влево или вправо. Ориентация пары определяется динамикой алгоритма.

 

или

 

Остальные связи, объединяющие отдельные 2-, 3- и 4-узлы, обозначим как черные связи.

Окрашивание связей эквивалентно окрашиванию узлов, на которые они указывают, то есть будем окрашивать узлы, а не связи.

 

B

 

R R

 

B B

или

R R

 

Пример 2-3-4 – дерева и эквивалентного ему RB – дерева выглядит следующим образом:

 

12 12

 

 

0

 

6

14

В RB – дереве алгоритм поиска соответствует стандартному алгоритму поиска в BST – дереве и поэтому работает более быстро, чем в 2-3-4 – дереве и быстрее, чем в BST – дереве.

Алгоритм вставки должен соответствовать алгоритму вставки в 2-3-4 – дерево, но выполняется на эквивалентной структуре RB – дерева. При этом дополнительные затраты на балансировку

Встречаются только тогда, когда новый элемент подключается к 4-узлу. Поскольку число 4-узлов невелико, то и затраты на балансировку невелики.

Рассмотрим преобразования в RB – дереве, эквивалентные вставке в 2-3-4 – дерево. Новый элемент, то есть новый узел, как и в BST – дереве подключается в качестве листа к терминальному узлу. При этом связь, подключающая новый узел к дереву всегда красная, так как в результате подключения образуется как минимум 3-узел, то есть узел нового элемента всегда красный.

2-узел 3-узел

1) 2

1 2

1

 

3-узел 4-узел

2)

 

14 17

 

3) Подключение к 4 узлу должно вызвать разделение 4-узла на два 2-узла.

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

4-узлов и схема нисходящего разделения имеет свои преимущества. Поэтому рассмотрим вначале схему нисходящего разделения 4-узла, лежащего на пути поиска при вставке нового элемента.

3а)

2 3

В 2-3-4:

4 2 2

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4