B-дерево — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Новая страница: «'''B-дерево''' — дерево поиска, впервые предложенное Р. Бэйером и Е. МакКрейтом в 1970 году. B-де…»)
 
Строка 14: Строка 14:
  
 
== Добавление ключа ==
 
== Добавление ключа ==
 +
 +
Ищем лист, в который можно добавить ключ, совершая проход от корня к листьям. Если найденный узел не заполнен, добавляем в него ключ. Иначе разбиваем узел на два узла, в первый добавляем первые <tex>t - 1</tex> ключей, во второй — последние <tex>t - 1</tex> ключей. Добавляем ключ в один из этих узлов. Оставшийся средний элемент добавляем в узел родителя, если он заполнен — повторяем пока не встретим не заполненный узел или не дойдем до корня. В последнем случае корень разбивается на два узла и высота дерева увеличивается.

Версия 07:50, 5 марта 2011

B-дерево — дерево поиска, впервые предложенное Р. Бэйером и Е. МакКрейтом в 1970 году.

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

Каждый узел B-дерева, кроме корня, содержит от [math]t - 1[/math] до [math]2t - 1[/math] ключей. Корень содержит от [math]1[/math] до [math]2t - 1[/math] ключей. [math]t[/math] — параметр дерева, не меньший 2. Ключи в каждом узле упорядочены.

Назначение

B-дерево предназначено для хранения информации на жёстком диске. Время произвольного доступа к жёсткому диску очень велико (миллисекунды), поэтому важно уменьшить количество узлов, просматриваемых при каждой операции, то есть высоту дерева, что достигается путём высокой ветвистости.

Поиск ключа

Если ключ содержится в текущем узле, возвращаем его. Иначе определяем интервал и переходим к соответствующему сыну. Повторяем пока ключ не найден или не дошли до листа.

Добавление ключа

Ищем лист, в который можно добавить ключ, совершая проход от корня к листьям. Если найденный узел не заполнен, добавляем в него ключ. Иначе разбиваем узел на два узла, в первый добавляем первые [math]t - 1[/math] ключей, во второй — последние [math]t - 1[/math] ключей. Добавляем ключ в один из этих узлов. Оставшийся средний элемент добавляем в узел родителя, если он заполнен — повторяем пока не встретим не заполненный узел или не дойдем до корня. В последнем случае корень разбивается на два узла и высота дерева увеличивается.