
- •Лекция 19
- •План лекции
- •B деревья
- •B деревья
- •Пример B дерева
- •Пример использования – страничная организация
- •Пример использования – управление страничной
- •B деревья -- определения
- •Теорема о высоте B дерева
- •Пример определения на Си
- •Поиск в В дереве
- •Алгоритм поиска
- •Поиск в В дереве
- •Добавление элемента в B дерево
- •Разбиение вершины B дерева
- •Разбиение вершины B
- •//Входные данные
- •// добавление в дерево с корнем B_tree_insert (T, k)
- •Добавление элемента в неполную вершину
- •B_tree_insert_nonfull(x, k)
- •Удаление элемента из B дерева
- •(д’) уменьшение высоты дерева
- •B деревья
- •Красно-чёрное дерево
- •Пример КЧ дерева (Википедия)
- •Высота и число узлов в КЧ дереве
- •Вставка узла в КЧ дерево -- схема
- •Вставка узла -- лист
- •Вставка узла – красные отец и дядя
- •Вставка узла – красные отец
- •Вставка узла – отец красный, дядя черный
- •Вставка узла – отец
- •Вставка узла – отец
- •Сравнение с АВЛ деревом
- •Сравнение с АВЛ деревом
- •Связь КЧ и B деревьев
- •Заключение
- •Удаление узла из КЧ дерева
- •B деревья
- •У таких деревьев, как правило, только корень находится в ОП, остальное дерево –
- •Определение B дерева 1/3
- •Определение B дерева 2/3
- •Возможна реализация, где каждая вершина является отдельным файлом

B_tree_insert_nonfull(x, k)
{
i = n(x);
if (leaf(x)) { // ключ вставляется в лист
while (i ≥ 0 && k < keyi(x)){ keyi+1(x)=keyi(x);
i--;
}
keyi+1(x) = k; n(x) = n(x)+1;
} else {
// поиск нужного ребенка
while( i ≥ 0 && k < keyi(x)) i--;

i = i+1;
if (n(Ci(x)) == 2t-1) {
// если ребенок–полная вершина
B_tree_split_child (x, i, Ci(x));
// разделение
if (k > keyi(x)) i = i+1;
}
B_tree_ insert_nonfull (Ci(x), k);
}

Удаление элемента из B дерева
(а) начальное дерево |
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
P |
|
|
|
|
|
|
||||||||
t = 3 |
|
C G |
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
T X |
|
|
||||||
|
|
|
|
|
|
M |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
A B |
D E F |
J K L |
|
N O |
Q R S |
U V |
Y Z |
||||||||||
(б) удалена F из листа |
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
P |
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
C G |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
T X |
|
|
|
|
|
|
|
|
|
M |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
A B |
D E |
J K L N O |
Q R S |
U V |
Y Z |

|
P |
|
C G |
T X |
|
M |
||
|
A B |
D E |
J K L N O |
Q R S |
U V |
Y Z |
(в) удалена M из внутренней вершины, ребенок
которой имеет
не менее t элементов
P
C G L |
T X |
A B |
D E |
J K |
N O |
Q R S |
U V |
Y Z |
Если ребенок, следующий за удаляемым ключом,
имеет не менее t элементов, поступаем аналогично
(в)

P
C G L |
T X |
A B |
D E |
J K |
N O |
Q R S |
U V |
Y Z |
(г) удалена G, ее дети имеют по t-1 ключу
P
C L |
T X |
A B |
D E J K |
N O |
Q R S |
U V |
Y Z |

х C L |
P |
T X |
A B |
D E J K |
N O |
Q R S |
U V |
Y Z |
(д) удалена D, в вершине х нет ключа D и t = 2
C L P T
X
A B E J K
N O
Q R S
U V
Y Z

(д’) уменьшение высоты дерева
C L P T
X
A B
E J K
N O
Q R S
U V
Y Z
(е) удалена C
E L P T
X
A B |
J K |
N O Q R S U V Y Z |

B деревья
Определение
Вставка и удаление вершины
Красно-черные деревья
Определение
Вставка вершины
Сравнение в АВЛ деревьями
Связь КЧ и B деревьев

Красно-чёрное дерево
Rudolf Bayer 1972
Симметричные двоичные B деревья
Леонидас Гибас и Роберт Седжвик 1978 КЧ деревья
Красно-чёрное дерево – это дерево двоичного поиска, обладающее следующими КЧ свойствами
1.Все листья чёрные и не содержат данных
2.Все потомки красных узлов чёрные – нет двух красных узлов подряд
3.На всех путях от корня к листьям число чёрных узлов одинаково и равно чёрной высоте дерева
