ТА_Методички / Lab_8
.pdf
Рис.5. Розрахунок кількості вузлів
Висота дерева:
Мінімальна:
Тобто часова складність операцій для Б-дерева оцінюється як 0(logtn).










.
2.4. Особливості операцій для Б-дерева.
Пошук у Б-дереві. Розглянемо рекурсивну операцію B_tree_search,
параметрами якої є вказівник х на корінь піддерева і ключ до шуканого елементу. Операція викликається спочатку для кореня дерева
B_tree_search(root[T], k). При знаходженні в дереві елементу із заданим ключем операція повертає пару (у, i), де у - вузол Б-дерева, i - порядковий номер вказівника, для якого keyi[y]=k. Інакше операція повертає nil.
B_Tree_Search(x, k)
1.i <- 1
2.while i
n[x] and k > keyi[x]
3.dv i <- i+1
4.if i
n[x] and k=keyi[x]
5.then return (x, i)
6.if leaf [x]
7.then return nil
8.else Disk_Read (pi[x])
9.return B_Tree_Search (pi[x], k)
При проходженні по Б-дереву кількість звернень до диска 0(h). Цикл while займає основний час обчислень і займає час 0(th).
Створення порожнього Б-дерева. Щоб побудувати дерево, спочатку створюється порожнє дерево за допомогою операції B_tree_create, а потім в нього включаються елементи за допомогою операції B_tree_insert. Обидві ці операції використовують допоміжну операцію Allocate_node, яка виділяє на диску місце для нового вузла. Ця операція займає 0(1) часу і не використовує операцію Disk_read.B_Tree_Create(T)
1.x <- Allocate_Node()
2.leaf [x] <- TRUE
3.n[x] <- 0
4.Disk_Write (x)
5.root[T] <- x
Операція вимагає 0(1) часу, оскільки виконується одне звернення до диска.
Операція розбиття вузла Б-дерева. Ключовим моментом додавання елементу в дерево є розбиття повного вузла у з 2t-1 ключами на два вузли, що мають по t-1 елементів у кожному. При цьому ключ-медіана відправляється до батька вузла у - x. Цей ключ стає розділювачем двох отриманих вузлів.
Ключ-медіана вставляється у впорядковану множину ключів вузла х.
Елементи з більшими, ніж медіана ключами, переходять в новий вузол z.
Вхідними параметрами операції є неповний вузол х, число i та повний вузол у (y=pi[x]).
B_Tree_Split (x, i, y)
1.z <- Allocate_Node()
2.leaf [z] <- leaf [y]
3.n[z] <- t-1
4.for j <- 1 to t-1
5.dv keyj[z] <- keyj+1[y]
6.if not leaf [y]
7.then for j <- 1 to t
8.dv pj[z] <- pj+1[y]
9.n[y] <- t-1
10.for j <- n[x]+1 downto i+1
11.dv pj+1[x] <- pj[x]
12.pj+1[x] <- z
13.for j <- n[x] downto i
14.dv keyj+1[x] <- keyj[x]
15.keyi[x] <- keyt[y]
16.n[x] <- n[x+1]
17.Disk_Write [x]
18.Disk_Write [y]
19.Disk_Write [z]
Додавання елементу у Б-дерево. Операція при включенні проходить по одному з шляхів пошуку від кореня до місця вставляння. Для цього потрібно час 0(th)=0(t logtn) і 0(h) звернень до диску. На шляху пошуку повні вузли,
що зустрічаються, розщеплюються за допомогою операції B_tree_split. B_Tree_Insert (T, k)
1.r <- root[T]
2.if n[r]=2t-1
3.then
4.s <- Allocate_Node()
5.root <- s
6.leaf[s] <- FALSE
7.n[s] <- 0
8.p1[s] <- 2
9.B_Tree_Split (S, 1, r)
10.B_Tree_Insert_Nonfull (s, k)
11.else B_Tree_Insert_Nonfull (r, k)
Точкою росту Б-дерева є не лист, а корінь.
Рис.6. Новий корінь містить ключ-медіану старого кореня.
Зробивши корінь неповним (або він не був таким із самого початку), ми викликаємо операцію B_tree_insert_nonfull (x, с), яка додає елемент k в
піддерево з коренем в неповному вузлі х. Це рекурсивна операція. B_Tree_Insert_Nonfull (x, k)
1.i <- n[x]
2.if leaf[x]=TRUE
3.then while i
1 and k < keyi[x]
4.dv keyi+1[x] <- keyi[x]
5.i <- i-1
6.keyi+1[x] <- k (дані)
7.n[x] <- n[x]+1
8.Disk_Write [x]
9.else while i
1 and k < keyi[x]
10.dv i <- i-1
11.i <- i+1
12.Disk_Read (pi[x])
13.if n[p[x]]=2t-1
14.then B_Tree_Split (x, i, pi[x])
15.if k > keyi[x]
16.then i <- i+1
17.B_Tree_ Insert_Nonfull (pi[x], k)
Рис.7. Видалення з Б-дерева.
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис.8. Видалення з Б-дерева (2)
Рис.9. Видалення 6.
Рис.10. Видалення 6 (продовження).
Рис.11. Видалення 7.
Рис.12. Видалення 13.
Рис.13. Видалення 7.
Рис.14. Видалення 4.
Рис.15. Видалення 2.
3. КОНТРОЛЬНІ ЗАПИТАННЯ
1.Що таке збалансованість?
2.Що таке розгалуженість дерева?
3.Що таке порядок дерева?
4.Які властивості зовнішньої пам’яті?
5.Яка структура дискових магнітних і оптичних нагромаджувачів?
6.Що таке Б-дерева?
7.Якою може бути кількість ключів, які містяться на сторінці Б-дерева?
8.Який типовий порядок галуження Б-дерев?
9.Де зберігається прикладна інформація у Б-дереві?
10.Як здійснюється пошуку у Б-дереві?
11. Як здійснюється вставляння нового елемента у Б-дереві?
4.ЛАБОРАТОРНЕ ЗАВДАННЯ
1.Ознайомитись з операціями роботи із Б-деревом.
2.Одержати індивідуальне завдання (див. Варіанти індивідуальних завдань).
3.Виконати індивідуальне завдання.
5.ЗМІСТ ЗВІТУ
1.Мета роботи.
2.Теоретичний аналіз опрацьованого матеріалу.
3.Відповіді на контрольні запитання.
4.Індивідуальне завдання, отримане у викладача.
5.Аналіз отриманих результатів і висновки.
6.Список використаної літератури.
СПИСОК ЛІТЕРАТУРИ
1.Кормен Т., Лейзерсон Ч., Ривест Р. Алгоритмы: построение и анализ. - М.:
МЦНМО, 1990. - 960 с.
2.Перевозчикова О.Л. Інформаційні системи та структури даних. – К.:
Видавничий дім “КМ-Академія”, 2004. – 149 с.
3.Ахо А., Хопкрофт Д., Ульман О. Построение и анализ вычислительных алгоритмов. - М.: Наука, 1989. - 360 с.
4.Вирт Н. Алгоритмы + структуры данных = программы. - М.: Мир, 1985. - 406c.
5.Вирт Н. Алгоритмы и структуры данных. - М.: Мир, 1989. - 360c.
6.Гудман С., Хидитниеми С. Введение в разработку и анализ алгоритмов. - М.:
Мир, 1981. - 368с.
7.Седжвик Р. Фундаментальные алгоритмы на С++. Т 1-4. Анализ/Структуры данных/Сортировка/Поиск. - СПб.: ООО "ДиаСофтЮП", 2002. - 688 с.
8.Седжвик Р. Фундаментальные алгоритмы на С++. Т 5. Алгоритмы на графах. - СПб.: ООО "ДиаСофтЮП", 2002. - 496 с.
ВАРІАНТИ ІНДИВІДУАЛЬНИХ ЗАВДАНЬ
Варіант 1
п.1) Нарисувати Б-дерево порядку 5, що отримується послідовним введенням наступних елементів: 4, 6,13,19,20,34,29,100,130,8,15
п.2) Показати результат видалення елементів 8, 130, 13, 34 із побудованого дерева.
Варіант 2
п.1) Нарисувати Б-дерево порядку 5, що отримується послідовним введенням наступних елементів: 47,5,24,100,36,98,5,29,45,17,10,8
п.2) Показати результат видалення елементів 100, 24, 98, 10 із побудованого дерева.
Варіант 3
п.1) Нарисувати Б-дерево порядку 5, що отримується послідовним введенням наступних елементів: 6,25,3,17,100,58,54,50,1,30,26
п.2) Показати результат видалення елементів 26,100,17,3 із побудованого дерева.
Варіант 4
п.1) Нарисувати Б-дерево порядку 5, що отримується послідовним введенням наступних елементів: 7,9,10,2,20,15,50,120,54,63,23
п.2) Показати результат видалення елементів 20, 120, 23, 10 із побудованого дерева.
Варіант 5
п.1) Нарисувати Б-дерево порядку 5, що отримується послідовним введенням наступних елементів: 8,7,10,2,20,30,89,26,14,15,100,200,300
п.2) Показати результат видалення елементів 300, 30, 20, 14 із побудованого дерева.
Варіант 6
п.1) Нарисувати Б-дерево порядку 5, що отримується послідовним введенням наступних елементів: 13,19,20,34,29,100, 130,8,15,4,6,9
п.2) Показати результат видалення елементів 8, 100, 13, 34 із побудованого дерева.
Варіант 7
п.1) Нарисувати Б-дерево порядку 5, що отримується послідовним введенням наступних елементів: 9,3,6,1,5,7,8,40,12,24,89,74,32
п.2) Показати результат видалення елементів 8, 12, 24, 74 із побудованого дерева.
Варіант 8
п.1) Побудувати Б-дерево порядку 5, що отримується послідовним введенням наступних елементів: 20,34,29,100,4, 6,13,19,130,8,15
п.2) Показати результат видалення елементів 8, 130, 13, 20 із побудованого дерева.
Варіант 9
