Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Слияние двух деревьев

Читайте также:
  1. Глава - Среди деревьев
  2. Глава 2. Внезапное слияние
  3. День 3. Слияние со стихией
  4. Задание 2. Слияние с Word
  5. Слияние и расщепление моделей
  6. Слияние модели

Для двух сбалансированных деревьев поиска T1 и T2 таких, что все элементы в T1 меньше или равнывсех элементов в T2 : слияние деревьев в одно дерево поиска T.

Выбираем из дерева T2 наименьший элемент v (самый левый) и удаляем его из дерева T2 . Элемент v называется стыковочным. Для него верно: T1£ v£ T2 .

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

Будем, для определенности, предполагать, что высота дерева T1 больше или равна высоте дерева T2.

Рассмотрим правую ветвь дерева T1: {v1,…,vK}. В силу сбалансированности дерева имеем: h(vi) - h(vi+1) £ 2, тогда на этой ветви найдется вершина vl , такая что

h(vl) = h(T2) или h(vl) = h(T2)+1

Сольем дерево с корнем в vl и T2 с помощью стыковочной вершины v и подставим новое дерево на место старой вершины vl.

Вершина vl и все дерево, с нее начинающееся, окажутся сбалансированными. Высота же дерева, начинающегося с vl, увеличится на 1, т.к. h(T2) £h(vl).

Итак, в результате изменений дерева у одной вершины w длина соответствующего поддерева увеличилась на 1. Далее нам следует запустить стандартную процедуру балансировки дерева. Мы должны пройти ветвь, заканчивающуюся на w, от w до корня и в каждой вершине проверить баланс. Если он будет по модулю больше 1, то баланс в данной вершине следует скорректировать одним или двумя вращениями.

Если, при этом, длина данного поддерева восстановится до значения, которому она была равна до слияния деревьев, то далее процесс проверки сбалансированности производить не надо (т.к. дерево T1 до слияния было сбалансированным). Иначе, процесс проверки следует продолжить.

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

 

Этот вариант не мог реализоваться при добавлении одной вершины к дереву. В этом случае до слияния деревьев высота дерева с корнем a была равна h+1, а после слияния она стала равной h+2.

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

Теорема. Для двух сбалансированных деревьев поиска T1 и T2 , состоящих из N1 и N2 вершин, имеющих высоты h1 и h2, и элемента v, таких, что все элементы в T1 меньше или равны v и v меньше или равно всех элементов в T2 : слияние деревьев с помощью стыковочного элемента v в одно сбалансированное дерево поиска T можно произвести за время T=O(log2 (N1+N2)) или за время T=O(|h1-h2|). Указанные деревья T1 и T2 можно слить за время T=O(log2 (N1+N2)).

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

 


Дата добавления: 2015-10-30; просмотров: 133 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Typedef struct CVertex2_| Разрешимые и перечислимые множества

mybiblioteka.su - 2015-2024 год. (0.007 сек.)