Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Онацкий.Вячеслав_Б-дерево.doc
Скачиваний:
16
Добавлен:
23.02.2015
Размер:
248.32 Кб
Скачать

Высота б-дерева

Количество обращений к диску, необходимое для выполнения большинства операций с Б-деревом, пропорционально его высоте. Проанализируем высоту Б-дерева.

Теорема. Высота Б-дерева Т с n=>1 узлами и минимальной степенью t=>2 не превышает logt(n+1)/2.

Доказательство. Пусть Б-дерево имеет высоту h. Корень дерева содержит как минимум один ключ, а все остальные узлы – как минимум по t-1 ключей. Таким образом, имеется как минимум 2 узла на глубине 1, как минимум 2t узлов на глубине 2, как минимум 2t2 узлов на глубине 3 и т.д., до глубины h, на которой имеется как минимум 2th-1 узлов( пример такого дерева, высоты которого равна 3, показан на рисунке 1). Следовательно, число ключей n удовлетворяет следующему неравенству:

Простейшее преобразование дает неравенство th=<(n+1)/2. Теорема доказывается путем логарифмирования по основанию t обеих частей этого неравенства.

Б-дерево порядка m представляет собой m-арное дерево поиска, характеризующееся следующими свойствами:

  1. Корень либо является листом, либо имеет по крайней мере двух сыновей.

  2. Каждый узел, за исключением корня и листьев, имеет от [m/2] до m сыновей.

  3. 3 Все пути от корня до любого листа имеют одинаковую длину.

Каждое 2-3 дерево является Б-деревом порядка 3, т.е. 3-арным. На рисунке 3 показано Б-дерево порядка 5, здесь предполагается, что в блоке листа умещается не более трех записей.

Рисунок 3. Б-дерево порядка 5

Б-дерево можно рассматривать как иерархический индекс, каждый узел в котором занимает блок во внешней памяти. Корень Б-дерева является индексом первого уровня. Каждый нелистовой узел на Б-дереве имеет форму (p0, k1, p1, k2, p2, …,, kn, pn), где p1 является указателем на i-го сына, 0 =< i =< n, a k1 – ключ, 1=< i =< n. Ключи в узле упорядочены, поэтому k1 < k2 < … < kn. Все ключи в поддереве, на которое указывает p0, меньше, чем k1. В случае 1 =< i < n все ключи в поддереве, на которое указывает p1, имеют значения, не меньше, чем ki, и меньше, чем ki+1. Все ключи в поддереве, на которое указывает pn, имеют значения, не меньше, чем kn. Считаем, то записи основного файла хранятся только в листьях.

Производительность б-деревьев

Применение Б-деревьев особенно полезно при разработке больших приложений, работающих с базами данных. При достаточно большом порядке Б-дерева, любой элемент в дереве можно найти после проверки всего нескольких узлов. Например, высота дерева 10 порядка, содержащего миллион записей, не может быть больше log11(1.000.000), или выше шести уровней. Чтобы найти определенный элемент, потребуется проверить не более шести узлов. Сбалансированное двоичное дерево с миллионом элементов имело бы высоту log2(1.000.000), или около 20 значений. Для поиска элемента в Б-дереве пришлось бы проверить 5 узлов и 100 ключей.

Применение Б-деревьев может обеспечить более высокую скорость работы, если проверка ключей выполняется относительно просто, в отличие от проверки узлов. Например, если база данных находится на диске, чтение данных с диска может происходить достаточно медленно. Когда же данные находятся в памяти, их проверка может происходить очень быстро.

Чтение данных с диска происходит большими блоками, и считывание целого блока занимает столько же времени, сколько и чтение одного байта. Если узлы Б0дерева не слишком велика, то чтение узла Б-дерева с диска займет не больше времени, чем чтение узла двоичного дерева. В этом случае, для поиска 5 узлов в Б-дереве потребуется выполнить 5 медленных обращений к диску, плюс 100 быстрых обращений к памяти. Поиск 20 узлов в двоичном дереве потребует 20 медленных обращений к диску и 20 быстрых обращений к памяти, при этом поиск в двоичном дереве будет более медленным, поскольку время, затраченное на 15 лишних обращений к диску будет более медленным, поскольку время, затраченное на 15 лишних обращений к диску будет намного больше, чем сэкономленное время 80 обращений к памяти.