Поиск в Б – дереве (D: Данные, a: pPage)
Обозначим L, R левая и правая границы поиска на странице
IF (a = NIL) (Ключа D нет в дереве)
ELSE L:= 1, R:= k + 1
DO (L < R)
i:= [(L + R)/2]
IF (a→ei.data ≤ D) L:= i + 1
ELSE R:= i
FI
OD
R:= R – 1
IF (R > 0 и a→eR.data = D) (ключ D есть в дереве)
ELSE (на этой странице ключа D нет)
IF (R = 0) Поиск в Б-дереве (D, a→p0)
ELSE Поиск в Б-дереве (D, a→eR.p)
FI
FI
FI
13.3 Построение Б-дерева
Построение Б-дерева или включение нового элемента данных D в Б-дерево происходит следующим образом:
· Выполним поиск элемента D в дереве.
· Если элемента D нет в дереве, то мы имеем страницу a и позицию R, в которой ожидали найти элемент D.
· Вставим элемент в позицию R+1, при этом количество элементов на странице k увеличилось на 1.
· Если k < = 2 m, то процесс включения закончен.
· Если k > 2 m (переполнение страницы), то создаём новую страницу b, переносим в неё m правых элементов из страницы a, а средний элемент переносим на один уровень вверх на родительскую страницу.
· Включение элемента в родительскую страницу производится по такому же алгоритму.
|
|
· Если родительской страницы нет, то она создаётся и в неё включается один элемент.
Эта схема сохраняет все характерные свойства Б-дерева. Получившиеся две новые страницы содержат ровно по m элементов. Включение элемента в родительскую страницу может опять перевести к переполнению, то есть разделение страниц может распространиться до самого корня. В этом случае может увеличиться высота дерева. Таким образом, Б-деревья растут обратно: от листа к корню.
Пример построения Б-дерева при m = 2. Предварительно удалим повторяющиеся буквы.
Рисунок 52 Построение Б-дерева