B-дерево

B-дерево
B-дерево
Тип Дерево
Изобретено в 1972 году
Изобретено Rudolf Bayer, Edward M. McCreight
Временная сложность
в О-символике
В среднем В худшем случае
Расход памяти O(n) O(n)
Поиск O(log n) O(log n)
Вставка O(log n) O(log n)
Удаление O(log n) O(log n)
Пример B-дерева степени 2

B-дерево (по-русски произносится как Б-дерево) — структура данных, дерево поиска. С точки зрения внешнего логического представления, сбалансированное, сильно ветвистое дерево во внешней памяти.

Использование B-деревьев впервые было предложено Р. Бэйером (англ. R. Bayer) и Е. МакКрейтом (англ. E. McCreight) в 1970 году.

Сбалансированность означает, что длина любых двух путей от корня до листов различается не более, чем на единицу.

Ветвистость дерева — это свойство каждого узла дерева ссылаться на большое число узлов-потомков.

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

Содержание

Применение

Структура B-дерева применяется для организации индексов во многих современных СУБД.

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

Относительно простая реализация алгоритмов и существование готовых библиотек (в том числе для C) для работы со структурой B-дерева обеспечивают популярность применения такой организации памяти в самых разнообразных программах, работающих с большими объёмами данных.

Структура и принципы построения

B-деревом называется дерево, удовлетворяющее следующим свойствам:

  1. Каждый узел содержит хотя бы один ключ. Ключи в каждом узле упорядочены. Корень содержит от 1 до 2t-1 ключей. Любой другой узел содержит от t-1 до 2t-1 ключей. Листья не являются исключением из этого правила. Здесь t - параметр дерева, не меньший 2 (и обычно принимающий значения от 50 до 2000[1]).
  2. Любой узел кроме листа, содержащий ключи K_1, ..., K_n, содержит n+1 сыновей. При этом
    1. Первый сын и все его потомки содержат ключи из интервала (-\infty, K_1)
    2. Для 2\le i\le n, i-й сын и все его потомки содержат ключи из интервала (K_{i-1}, K_i)
    3. (n+1)-й сын и все его потомки содержат ключи из интервала (K_n, \infty)
  3. Глубина всех листьев одинакова.

Свойство 2 можно сформулировать иначе: каждый узел B-дерева, кроме листьев, можно рассматривать как упорядоченный список, в котором чередуются ключи и указатели на сыновей.

Поиск

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

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

Будем называть деревом потомков некоего узла поддерево, состоящее из этого узла и его потомков.

Вначале определим функцию, которая добавляет ключ K к дереву потомков узла x. После выполнения функции во всех пройденных узлах, кроме, может быть, самого узла x, будет меньше 2t-1, но не меньше t-1, ключей.

  1. Если х - не лист,
    1. Определяем интервал, где должен находиться K. Пусть y - соответствующий сын.
    2. Рекурсивно добавляем K к дереву потомков y.
    3. Если узел y полон, то есть содержит 2t-1 ключей, расщепляем его на два. Узел y_1 получает первые t-1 из ключей y и первые t его потомков, а узел y_2 - последние t-1 из ключей y и последние t его потомков. Медианный из ключей узла y попадает в узел х, а указатель на y в узле x заменяется указателями на узлы y_1 и y_2.
  2. Если x - лист, просто добавляем туда ключ K.

Теперь определим добавление ключа K ко всему дереву. Буквой R обозначается корневой узел.

  1. Добавим K к дереву потомков R.
  2. Если R содержит теперь 2t-1 ключей, расщепляем его на два. Узел R_1 получает первые t-1 из ключей R и первые t его потомков, а узел R_2 - последние t-1 из ключей R и последние t его потомков. Медианный из ключей узла R попадает вo вновь созданный узел, который становится корневым. Узлы R_1 и R_2 становятся его потомками.

Удаление ключа

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

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

Если x - не лист, а K - его i-й ключ, удаляем самый правый ключ из поддерева потомков i-го сына x, или, наоборот, самый левый ключ из поддерева потомков i+1-го сына x. После этого заменяем ключ K удалённым ключом. Удаление ключа происходит так, как описано в предыдущем абзаце.

Основные достоинства

  • Во всех случаях полезное использование пространства вторичной памяти составляет свыше 50 %. С ростом степени полезного использования памяти не происходит снижения качества обслуживания.
  • Произвольный доступ к записи реализуется посредством малого количества подопераций (обращения к физическим блокам).
  • В среднем достаточно эффективно реализуются операции включения и удаления записей; при этом сохраняется естественный порядок ключей с целью последовательной обработки, а также соответствующий баланс дерева для обеспечения быстрой произвольной выборки.
  • Неизменная упорядоченность по ключу обеспечивает возможность эффективной пакетной обработки.

Основной недостаток В-деревьев состоит в отсутствии для них эффективных средств выборки данных (т.е. метода обхода дерева), упорядоченных по отличному от выбранного ключу.

См. также

Литература

  • Ананий В. Левитин. Глава 7. Пространственно-временной компромисс: B-деревья // Алгоритмы: введение в разработку и анализ = Introduction to The Design and Analysis of Algorithms. — М.: Вильямс, 2006. — С. 331—339. — ISBN 0-201-74395-7
  • Томас Х. Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн. Глава 18. B-деревья // Алгоритмы: построение и анализ = Introduction to Algorithms. — 2-е изд. — М.: Вильямс, 2006. — С. 515­—536. — ISBN 0-07-013151-1

Ссылки

Примечания

  1. Томас Х. Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн. Глава 18. B-деревья // Алгоритмы: построение и анализ = Introduction to Algorithms. — 2-е изд. — М.: Вильямс, 2006. — С. 515­—536. — ISBN 0-07-013151-1



Wikimedia Foundation. 2010.

Игры ⚽ Нужно сделать НИР?

Полезное


Смотреть что такое "B-дерево" в других словарях:

  • дерево — Балка, бревно, брус, валежник, буревал, бурелом, дрова, дром (дрюк), дручина, дручок, дубина, дылка, дыль, колода, кол, мачта, обрубок, оглобля, орясина, пень, плаха, полено, столб, тес, тычина, хворост, чурбан; головня, головешка. Собират.:… …   Словарь синонимов

  • Дерево отрезков — структура данных, позволяющая быстро изменять значения в массиве и находить некоторые функции от элементов массива. Содержание 1 Дерево отрезков в памяти …   Википедия

  • Дерево Фенвика — (двоичное индексированное дерево, англ. Fenwick tree, binary indexed tree, BIT) структура данных, позволяющая быстро изменять значения в массиве и находить некоторые функции от элементов массива. Впервые описано Питером Фенвиком в 1994 году …   Википедия

  • Дерево Фибоначчи — АВЛ дерево с наименьшим числом вершин при заданной высоте (глубине). Если для какой либо из вершин высота поддерева, для которого эта вершина является корнем, равна , то правое и левое поддерево этой вершины имеют высоты равные соответственно и …   Википедия

  • ДЕРЕВО — или древо; мн. дерева, деревья, древа, древеса ср. самое крупное и рослое растение, которое выгоняет от корня один пень или лесину и состоит из древесины, древесных волокон, придающнх ему плотность и крепость. Меньшие деревья, не достигаюшие… …   Толковый словарь Даля

  • Дерево-людоед — Дерево людоед  мифическое хищное растение, которое достаточно велико, чтобы ловить и поглощать людей или крупных животных. Известно из фольклора разных стран мира. Опубликованные в XIX веке отчёты европейских путешественников о якобы… …   Википедия

  • Дерево Анны Франк — в 2006 г. Координаты …   Википедия

  • Дерево Бодхи — Дерево Бодхи  в буддизме  легендарное дерево в роще Урувелла, медитируя под которым, принц Гаутама достиг просветления и стал …   Википедия

  • Дерево принятия решений — (также могут назваться деревьями классификации или регрессионными деревьями)  используется в области статистики и анализа данных для прогнозных моделей. Структура дерева представляет собой следующее: «листья» и «ветки». На ребрах («ветках»)… …   Википедия

  • ДЕРЕВО — (arbor), растение с многолетним, в разл. степени одревесневающим, разветвлённым или неветвяшимся главным стеблем стволом, сохраняющимся в течение всей жизни растения, и кроной. Типичная крона из ветвей образуется у хвойных (из голосеменных) и… …   Биологический энциклопедический словарь

  • ДЕРЕВО — фундаментальный культурный символ, репрезентирующий вертикальную модель мира, семантически фундированную идеей бинарных оппозиций (как космологически, так и аксиологически артикулированных). В традиционной культуре выступает основополагающим… …   История Философии: Энциклопедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»