Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
экзамен / Bazy_Dannykh_-_shpargalki_ekzamenu.docx
Скачиваний:
33
Добавлен:
06.02.2018
Размер:
66.81 Кб
Скачать
  1. Определение и структура в-дерева. Поиск и в-дереве

Б-дерево – иерархическая структура индексированного файла, состоящая из узлов- блоков фиксированной длины.

Физической организация Б-дерева – мультисписочная структура страниц внешней памяти, то есть каждому узлу дерева соответствует блок внешней памяти (страница).

Свойства Б-дерева

Сбалансированность – длина любых двух путей от корня до листьев совпадает.

Ветвистость дерева – у каждого узла дерева большое число узлов-потомков.

Значения ключей в записях Б-дерева левосторонне упорядочены.

Структура:

<ключ> <ссылка на основной файл> <ссылка на блок потомок>

Каждый узел содержит хотя бы один ключ. Ключи в каждом узле упорядочены. Корень содержит от 1 до 2t-1 ключей. Любой другой узел содержит от t-1 до 2t-1 ключей (t >= 2 – параметр дерева). У листьев потомков нет. Глубина всех листьев одинакова.

Поиск в Б-дереве: Если ключ содержится в корне, он найден. Иначе определяем интервал и идём к соответствующему потомку. Повторять, пока не найден результат или не дошли до листа. Если лист, то не найдено.

  1. Дополнение записи в в-дерево.

Процедурой поиска (сверху вниз) определяем лист и место в листе.

Если лист заполнен (т.е. в нем 2t-1 ключей) – разбиваем его на 2 листа по t-1, а средний элемент перемещается в родительский узел. Если он тоже полон – снова разбить.

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

Найденный лист объявляется текущим боком, а новую запись наполняем пустым указателем на потомок. На примере – добавление ключа 15.

  1. Удаление записи в в-дереве.

Находим узел, содержащий ключ. Пусть этот узел — x. Если x – лист, удаляем оттуда ключ.

Если в узле x осталось не меньше t-1 ключей – останавливаемся. Пример – удаление ключа 9 из листа.

Иначе смотрим на количество ключей в следующем, а потом в предыдущем узле.

Если следующий узел есть, и в нём не менее t ключей, мы добавляем в x ключ-разделитель между ним и следующим узлом, а на его место ставим первый ключ следующего узла, после чего останавливаемся.

Если это не так, но есть предыдущий узел, и в нём не менее t ключей, мы добавляем в x ключ-разделитель между ним и предыдущим узлом, а на его место ставим последний ключ предыдущего узла, после чего останавливаемся.

Если снова нет – объединяем узел x со следующим или предыдущим узлом, и в объединённый узел перемещаем ключ, разделяющий два узла. При этом в родительском узле может остаться только t-2 ключей.

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

Если мы в результате дошли до корня, и в нём осталось от 1 до t-1 ключей, делать ничего не надо, потому что корень может иметь и меньше t-1 ключей.

Если же в корне не осталось ни одного ключа, исключаем корневой узел, а его единственный потомок делаем новым корнем дерева.

Соседние файлы в папке экзамен