Читайте также: |
|
Для данной вершины дерева v разбиение сбалансированного дерева поиска T на два сбалансированных дерева поиска T1 и T2 таких, что все элементы в T1 меньше или равны v, и все элементы в T2 больше или равны v.
Алгоритм, практически полностью, совпадает с алгоритмом разбиения обычного дерева поиска. Только, теперь, нам следует пользоваться алгоритмом слияния деревьев для сбалансированных деревьев поиска.
Пусть высота дерева T0 равна s0. Пусть высоты деревьев, которые мы будем сливать, например, с деревом T0 имеют значения s1,…,sK. Последовательность S={s0,…,sK } строго возрастающая, sK£h, где h – высота дерева T. В силу алгоритма слияния деревьев с использованием стыковочного элемента, слияние двух деревьев X1 и X2 с высотой h1 и h2 дает дерево высотой MAX(h1, h2) или MAX(h1, h2)+1.
Из чего, по индукции, сразу получаем, что после добавления очередного дерева Ti к дереву T0, высота дерева T0 будет равной либо si, либо si+1. Тогда, время работы всего алгоритма T=O(|s0- s1|+|s1- s2|+…+|sK-1- sK|)=O(log2 N), где N – количество вершин в суммарном дереве.
Итак, верна следующая теорема
Теорема. Для данной вершины v сбалансированного дерева поиска T разбиение на два сбалансированных дерева поиска T1 и T2 таких, что все элементы в T1 меньше или равны v, и все элементы в T2 больше или равны v. может быть произведено указанным алгоритмом за время = O(log2 N), где N – суммарное количество вершин в деревьях T1 и T2.
Лекция 10
Красно-черные деревья
Красно-черными деревьями называют бинарные деревья поиска, у которых для каждой вершины добавляется дополнительное свойство: вершина является черной или красной. При этом требуется выполнение следующих свойств:
· корень дерева – черный
· у каждой красной вершины потомки – черные
· в любых двух ветвях от корня до листа количество содержащихся черных вершин равно
Для простоты реализации в дерево добавляются фиктивные черные вершины: для каждой вершины дерева, при отсутствии у нее потомка, на место соответствующего потомка вставляется фиктивная черная вершина.
Вершины, отличные от фиктивных, называются внутренними. Будем далее называть листьями вершины, все потомки которых – фиктивные. При определении высоты дерева фиктивные вершины учитывать не будем.
Например, для задания одной вершины красно-черного дерева целых чисел в языке С можно использовать следующую структуру
Typedef struct SBTree_
{
Int IsRed;
Int value;
struct STree_ *par;
struct STree_ *left, *right;
} SBTree;
здесь указатель par указывает на родительский элемент данной вершины, а left и right – на двух потомков, которых традиционно называют левым и правым. Целая переменная IsRed указывает – является ли данная вершина красной. Величина value называется ключом вершины.
Дата добавления: 2015-10-30; просмотров: 159 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Добавление элемента в дерево | | | Добавление элемента в красно-черное дерево |