2. 2
7.1. B-деревья
Если дерево поиска хранится на диске, то задача ускорения поиска включает в себя
задачу минимизации числа обращений к диску. Это означает, что данные надо
хранить в блоках некоторого стандартного размера, кратного физическому размеру
блока на магнитном носителе.
Глава 7. B-деревья.
Двоичное дерево не позволяет разумно организовать группировку данных так, чтобы
при поиске сравнения группировались вокруг данных одного блока.
15
7 23
4 10 20 29
1 5 8 13 17 22 27 31
3. 3
Обобщение 2-3-дерева – В-дерево k-го порядка
Структура В-дерева:
Корневой узел содержит от 1 до 2*k ключей
Ключи упорядочены (возможен быстрый поиск)
Промежуточные узлы имеют все ссылки
(корень – от 2, остальные – от (k+1) до (2*k+1) ссылки)
Все терминальные узлы (листья) находятся на одном уровне
Прочие узлы содержат от k до 2*k ключей
Пример структуры при k = 3
4. 4
Глава 7. B-деревья.
Вставка нового ключа в В-дерево.
1. Если блок ключей неполон, то возможно добавление нового ключа в неполный блок.
n < 2k ключей
2. Если блок ключей полон, но есть соседний неполный блок, то возможно
«переливание» одного ключа в соседний блок.
5. 5
Глава 7. B-деревья.
Вставка нового ключа в В-дерево расщеплением узла.
3. Если блок ключей полон, и соседние с ним блоки тоже полны, то необходимо
делать расщепление блока.
(2 * k + 1) ключ
• При вставке ключа в терминальный узел образовалось переполнение узла
k кл. k кл.1
• Делим узел на 3 узла: k, 1 и k ключей
• Перемещаем средний ключ на предыдущий уровень
При расщеплении терминального узла, возможно, придется добавлять
в нетерминальные узлы ключи вместе с поддеревьями. При этом опять возможно
сделать это путем пополнения блока, переливания и расщепления (см. след. слайд).
9. 9
узловk≥
узловk
узловk>
узловk>
Глава 7. B-деревья.
Удаление ключа из B-дерева.
2. Удаление ключа из терминального узла путем уменьшения размера узла, «займа»
с переливанием или слияния узлов.
а) уменьшение размера узла:
узловk 1−>
б) переливание с займом из
соседнего узла:
б) слияние узлов:
узловk
узловk
узловk2
Слияние узлов может
привести к удалению
ключей в промежуточных
узлах, вплоть до корневого.
10. 10
Глава 7. B-деревья.
Структура блока.
Ключ
Ссылка на
левое поддерево
Ссылка на данные Ссылка на следующее
поддерево
Промежуточный
узел
Ключ
Ссылка на данные
Лист
11. 11
Глава 7. B-деревья.
В+ дерево: структура блока.
Копия
ключа
Ссылка на
левое поддерево
Ссылка на следующее
поддерево
Промежуточный
узел
Ключ
Ссылка на данные
Лист
12. 12
Глава 7. B-деревья.
Общая структура B+ дерева
21 37
7 12 21 26 37 43
1 3 4 6 7 10 17 19 21 24 26 29 32 35 37 40 43 4642151412
13. 13
Глава 7. B-деревья.
Выполнение операций в B+ дереве
Изменения в выполнении вставки и удаления узлов.
1. Переливание
12
1512
2. Расщепление
(2 * k + 1) ключk кл. k+1 кл.1
• Добавление узла
• Перемещение
• Копирование
• Разделение узла на два
• Копирование ключа
• Сдвиг копии и образование
новых ссылок
На промежуточных узлах все операции происходят как и раньше.
14. 14
Глава 7. B-деревья.
Особенности B+ дерева
Преимущества структуры В+ дерева перед В деревом:
1. Унификация структуры узлов;
2. Наличие сквозного списка ключей позволяет легко находить отрезки данных.
При удалении ключей могут оставаться копии удаленных ключей. Это никак не
влияет на алгоритм и результат поиска.
Некоторое усложнение работы операций по вставке и удалению ключей влияет
на общую скорость работы незначительно, поскольку не связано с дополнительными
операциями чтения/записи данных.