B-дерево — различия между версиями
Mityada (обсуждение | вклад) |
Mityada (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
− | '''B-дерево''' — дерево поиска, впервые | + | '''B-дерево''' — дерево поиска, позволяющее проводить поиск, добавление и удаление элементов за <tex>O(\log n)</tex>. |
+ | |||
+ | B-дерево было впервые предложено Р. Бэйером и Е. МакКрейтом в 1970 году. | ||
+ | |||
+ | == Структура == | ||
B-дерево является сбалансированным, то есть глубина всех его листьев одинакова. | B-дерево является сбалансированным, то есть глубина всех его листьев одинакова. | ||
− | Каждый узел B-дерева, кроме корня, содержит от <tex>t - 1</tex> до <tex>2t - 1</tex> ключей. Корень содержит от <tex>1</tex> до <tex>2t - 1</tex> ключей. <tex>t</tex> — параметр дерева, не меньший 2. Ключи в каждом узле упорядочены. | + | Каждый узел B-дерева, кроме корня, содержит от <tex>t - 1</tex> до <tex>2t - 1</tex> ключей. Корень содержит от <tex>1</tex> до <tex>2t - 1</tex> ключей. <tex>t</tex> — параметр дерева, не меньший <tex>2</tex>. Ключи в каждом узле упорядочены. |
== Назначение == | == Назначение == |
Версия 07:58, 5 марта 2011
B-дерево — дерево поиска, позволяющее проводить поиск, добавление и удаление элементов за
.B-дерево было впервые предложено Р. Бэйером и Е. МакКрейтом в 1970 году.
Содержание
Структура
B-дерево является сбалансированным, то есть глубина всех его листьев одинакова.
Каждый узел B-дерева, кроме корня, содержит от
до ключей. Корень содержит от до ключей. — параметр дерева, не меньший . Ключи в каждом узле упорядочены.Назначение
B-дерево предназначено для хранения информации на жёстком диске. Время произвольного доступа к жёсткому диску очень велико (миллисекунды), поэтому важно уменьшить количество узлов, просматриваемых при каждой операции, то есть высоту дерева, что достигается путём высокой ветвистости.
Поиск ключа
Если ключ содержится в текущем узле, возвращаем его. Иначе определяем интервал и переходим к соответствующему сыну. Повторяем пока ключ не найден или не дошли до листа.
Добавление ключа
Ищем лист, в который можно добавить ключ, совершая проход от корня к листьям. Если найденный узел не заполнен, добавляем в него ключ. Иначе разбиваем узел на два узла, в первый добавляем первые
ключей, во второй — последние ключей. Добавляем ключ в один из этих узлов. Оставшийся средний элемент добавляем в узел родителя, если он заполнен — повторяем пока не встретим не заполненный узел или не дойдем до корня. В последнем случае корень разбивается на два узла и высота дерева увеличивается.