Б-дерева (англ. B-tree) — це збалансована деревоподібна структура даних, яка підтримує відсортовані дані та дозволяє здійснювати пошук, послідовний доступ, вставки та видалення в логарифмічному часі. Б-дерево узагальнює двійкове дерево пошуку, допускаючи вузли з більше ніж двома дочірніми елементами. На відміну від інших самобалансуючих двійкових дерев пошуку, Б-дерево добре підходить для систем зберігання даних, які читають і записують відносно великі блоки даних, таких як бази даних і файлові системи. Б-дерево забезпечує ефективне збереження інформації на магнітних дисках та інших пристроях з прямим доступом. Б-дерева схожі на червоно-чорні, різниця в тому, що в Б-дереві вузол може мати багато дітей, на практиці до тисячі, залежно від характеристик використовуваного диска. Завдяки цьому константа в оцінці O(log n) для висоти дерева менша, ніж для червоно-чорних дерев. Як і червоно-чорні дерева, Б-дерева дозволяють реалізувати багато операцій з множинами розміру n за час O(log n).
B-tree | ||
---|---|---|
Тип | Дерево | |
Винайдено | 1970 | |
Винайшли | [en], [en] | |
Обчислювальна складність у записі великого О | ||
Середня | Найгірша | |
Простір | O(n) | O(n) |
Пошук | O(log n) | O(log n) |
Вставляння | O(log n) | O(log n) |
Видалення | O(log n) | O(log n) |
Вузол x, який зберігає n[x] ключів, має n[x]+1 дітей. Ключі, що зберігаються в x служать границями, що розділяють всіх його нащадків на n[x]+1 груп; за кожну групу відповідає один з нащадків x. При пошуку в Б-дереві ми порівнюємо шуканий ключ з n[x] ключами, що зберігаються в x, і за результатами порівняння вибираємо одного з n[x]+1 нащадків.
Історія
Б-дерево було розроблене у 1972 році [en] та [en].
Особливості роботи з інформацією, що розміщується на диску
Алгоритми, що працюють з Б-деревами, зберігають в оперативній пам'яті лише невелику частину всієї інформації (фіксоване число секторів).
Диск розглядається як велика ділянка пам'яті, робота з яким відбувається наступним чином: перед тим як працювати з об'єктом x, виконується спеціальна операція Disk — Read(x) (читання з диска). Після внесення змін в об'єкт x виконується операція Disk — Write(x) (запис на диск).
Час роботи програми в основному визначається кількістю цих операцій, так що має сенс читати / записувати як можна більше інформації за один раз і зробити так, щоб вузол Б-дерева заповнював повністю один сектор диска. Таким чином, ступінь розгалуження (число дітей вузла) визначається розміром сектора.
Типова ступінь розгалуження Б-дерев знаходиться між 50 і 2000 в залежності від розміру елемента. Збільшення ступеня розгалуження різко скорочує висоту дерева, і тим самим число звернень до диску, при пошуку. Наприклад, Б-дерево ступеня 1001 і висоти 2 може зберігати понад мільярд ключів. Враховуючи, що корінь можна постійно зберігати в оперативній пам'яті, достатньо двох звернень до диска при пошуку потрібного ключа.
Вважаємо, що прикладна інформація, пов'язана з ключем, зберігається в тому ж вузлі дерева. На практиці це не завжди зручно, і в реальному алгоритмі вузол може містити лише посилання на сектор, де вона зберігається.
Визначення
Згідно з визначенням Кнута, B-дерево порядку m - це дерево, яке задовольняє такі властивості:
- Кожен вузол має щонайбільше m нащадків.
- Кожен внутрішній вузол має принаймні ⌈m/2⌉ нащадків.
- Кожен нелистковий вузол має принаймні двох дочірніх вузлів.
- Усі листочки розташовані на одному рівні.
- Нелистовий вузол з k дочірніми елементами містить k−1 ключів.
Ключі кожного внутрішнього вузла діють як значення розділення, які розділяють його піддерева.
- Внутрішні вузли
- Внутрішні вузли — це всі вузли за винятком листових вузлів і кореневого вузла. Зазвичай вони представлені у вигляді впорядкованого набору елементів і дочірніх покажчиків. Кожен внутрішній вузол містить максимум U нащадків і мінімум L нащадків. Таким чином, кількість елементів завжди на 1 менше, ніж кількість дочірніх покажчиків (кількість елементів знаходиться між L−1 та U−1). U має бути або 2L, або 2L−1; тому кожен внутрішній вузол заповнений принаймні наполовину. Зв’язок між U та L означає, що два напівзаповнені вузли можуть бути об’єднані, щоб скласти вузол, а один повний вузол можна розділити на два вузли (якщо є місце, щоб підштовхнути один елемент до батьківського). Ці властивості дозволяють видаляти та вставляти нові значення в Б-дерево та налаштувати дерево, щоб зберегти властивості Б-дерева.
- Кореневий вузол
- Кількість дочірніх елементів кореневого вузла має ту саму верхню межу, що й внутрішні вузли, але не має нижньої межі. Наприклад, якщо у всьому дереві менше ніж L-1 елементів, корінь буде єдиним вузлом у дереві, у якому взагалі немає нащадків.
- Листя
- Листя — це вузли, що є фактичними об’єктами даних або фрагментами. Інші автори також називають листям рівні вище цих листів.
Б-дерево глибини n+1 може містити приблизно в U разів більше елементів, ніж Б-дерево глибини n, але вартість операцій пошуку, вставки та видалення зростає з глибиною дерева. Як і в будь-якому збалансованому дереві, вартість зростає набагато повільніше, ніж кількість елементів.
Деякі збалансовані дерева зберігають значення лише в листі і використовують різні типи вузлів для листя і внутрішніх вузлів. Б-дерева зберігають значення в кожному вузлі дерева, за винятком листя.
- Б-дерево
- Б-деревом називають кореневе дерево, влаштоване наступним чином. Кожен вузол x містить наступні поля:
- n[x] — кількість ключів, що зберігаються у вузлі x;
- key1[x], key2[x], … ,keyn(x)[x] — самі ключі в не спадаючому порядку;
- leaf[x] — булеве значення, істинне, коли вузол x є листом.
Якщо x — внутрішній вузол, то він містить покажчики c1[x], c2[x] cn(x)+1[x], на його дітей в кількості n[x]+1.
- У листів дітей немає, і ці поля для них не визначені.
- Усі листя знаходяться на одній і тій же глибині, що дорівнює висоті дерева.
- Можлива кількість ключів, що зберігаються в одному вузлі, визначається параметром t≥2, яке називається мінімальним ступенем Б-дерева.
- Для кожного некореневого вузла x виконується нерівність (t-1)≤n[x]≤(2t-1). Таким чином, число дітей у будь-якого внутрішнього вузла (крім кореня) знаходиться в межах від t до 2t.
- Якщо дерево не пусте, то в корені повинен зберігатися хоча б один ключ. Вузол, який зберігає рівно 2t-1 ключів, буде називатися повним.
Ключі keyi[x] служать границями, що розділяють значення ключів в піддеревах. Точніше,
- c1[x] посилається на піддерево, ключі в якому менше, ніж key1[x];
- ci[x] при i=2,3n посилається на піддерево, ключі в якому знаходяться в межах від keyi-1[x] до keyi[x];
- cn(x)+1[x] посилається на піддерево, ключі в якому більше, ніж keyn(x)[x].
У випадку, коли t=2, у кожного внутрішнього вузла 2, 3 або 4 нащадка, виходить так зване 2-3-4 — дерево. Для ефективної роботи з диском на практиці t вибирають досить великим. Число звернень до диска для більшості операцій пропорційно висоті Б-дерева.
Для висоти Б-дерева з елементами даних:
Основні операції з Б-деревами
Корінь Б-дерева розміщують в оперативній пам'яті, при цьому читання з диска для кореня ніколи не потрібно, а проте всякий раз, коли змінюється корінь, його зберігають на диску. Усі вузли, що передаються як параметри, вже зчитані з диска. Всі процедури обробляють дерево за один прохід від кореня до листів.
Пошук в Б-дереві
Пошук в Б-дереві схожий на пошук в двійковому дереві пошуку. Різниця в тому, що в кожному вузлі x вибирається один варіант з (n[x]+1), а не з двох. При пошуку проглядаються вузли дерева від кореня до листа. Тому число звернень до диску є O(h)=O(logtn), де h — висота дерева, а n — кількість ключів. Так як n[x]≤2t, то час обчислень дорівнює O(th)=O(t×logtn) .
Створення порожнього Б-дерева
Створення порожнього Б-дерева здійснюється за допомогою процедури, яка знаходить місце на диску для нового вузла та розміщує його. Це можна реалізувати за час O(1) і не використовувати операцію читання з диска.
Додавання елемента в Б-дерево
Додавання елемента в Б-дерево здійснюється з використанням процедури розбиття повного (з 2t-1 ключами) вузла y на два вузли, що мають по t-1 елементів у кожному. При цьому ключ-медіана key t[y] відправляється до батька x вузла y і стає роздільником двох отриманих вузлів. Це можливо, якщо вузол x не вичерпний. Якщо y — корінь, процедура працює аналогічно. В цьому випадку висота дерева збільшується на одиницю.
Процедура додавання нового елемента проходить один раз від кореня до листа, на це потрібен час O(th)=O(t×logtn) і O(h) звернень до диска, де h — висота дерева. По ходу справи поділяються повні вузли, що зустрічаються на шляху. Зауважимо, що якщо повний вузол має неповного батька, то його можна розділити, тому що в батька є місце для додаткового ключа, тому, піднімаючись вгору, доходимо до неповного листа, куди і додаємо новий елемент.
Видалення елемента
Видалення елемента з B-дерева відбувається аналогічно додаванню, хоча трохи складніше. Видалення ключа з В-дерева, хоча і аналогічно вставці, являє собою складнішу задачу. Це пов'язано з тим, що ключ може бути видалений з будь-якого вузла, а не тільки з листа, а видалення з внутрішнього вузла вимагає певної перебудови дочірніх вузлів. Як і у випадку вставки, ми повинні забезпечити, щоб при виконанні операції видалення не були порушені властивості В-дерева. Аналогічно тому, як ми мали можливість переконатися, що вузли не надто сильно заповнені для вставки нового ключа, нам належить переконатися, що вузол не стає занадто мало заповнений в процесі видалення ключа (за винятком кореневого вузла, який може мати менше t — 1 ключів, хоча і не може мати більше 2t — 1 ключів).
Отже, нехай процедура B_TREE_DELETE повинна видалити ключ k з піддереві, коренем якого є вузол x. Ця процедура розроблена таким чином, що при її рекурсивному виклику для вузла х гарантована наявність в цьому вузлі принаймні t ключів. Ця умова вимагає наявності у вузлі більшої кількості ключів, ніж мінімальна в звичайному В-дереві, так що іноді ключ може бути переміщений в дочірній вузол перед тим, як рекурсія звернеться до цього дочірньому вузлу. Таке посилення властивості В-дерева (наявність «запасного» ключа) дає нам можливість виконати видалення ключа за один спадний прохід по дереву (з єдиним винятком, який буде пояснено пізніше). Слід також врахувати, що якщо корінь дерева х стає внутрішнім вузлом, що не містить жодного ключа (така ситуація може виникнути в розглянутих нижче випадках 2в і 36), то вузол х віддаляється, а його єдиний дочірній вузол С1[х] стає новим коренем дерева (при цьому зменшується висота В-дерева і зберігається його властивість, що вимагає, щоб кореневий вузол непорожнього дерева містив як мінімум один ключ).
Замість того щоб представити вам повний псевдокод процедури видалення вузла з В-дерева, ми просто накидаємо послідовність виконуваних дій.
1. Якщо вузол k знаходиться у вузлі x і x є листом — видаляємо k з х.
2. Якщо вузол k знаходиться у вузлі х і х є внутрішнім вузлом, виконуємо наступні дії:
а) Якщо дочірній по відношенню до х вузол у, попередній ключу k у вузлі x, містить не менше t ключів, то знаходимо до k' попередника k в піддереві, коренем якого є у. Рекурсивно видаляємо k' і замінюємо k в х ключем k'. (Пошук ключа k' і видалення його можна виконати в процесі одного спадного проходу.)
б) Ситуація, симетрична ситуації а: якщо дочірній по відношенню до х вузол z, наступний за ключем k в вузлі x, містить не менше t ключів, то знаходимо k' — наступний за k ключ в піддереві, коренем якого є z. Рекурсивно видаляємо k' і замінюємо k в х ключем k'. (Пошук ключа k' і видалення його можна виконати в процесі одного спадного проходу.)
в) У противному випадку, якщо і y, і z містять по t — 1 ключів, вносимо k і всі ключі z в у (при цьому з х видаляється k і покажчик на z, а вузол у після цього містить 2t — 1 ключів), а потім звільняємо z і рекурсивно видаляємо k з у.
3. Якщо ключ k відсутній у внутрішньому вузлі х, знаходимо корінь cі[х] піддерева, яке повинно містити k (якщо такий ключ є в даному В-дереві). Якщо cі[х] містить тільки t — 1 ключів, виконуємо крок 3а або 3б для того, щоб гарантувати, що далі ми переходимо в вузол, що містить як мінімум t ключів. Потім ми рекурсивно видаляємо k з піддерева з коренем cі[х].
а) Якщо cі[х] містить тільки t — 1 ключів, але при цьому один з її безпосередніх сусідів (під яким ми розуміємо дочірній по відношенню до х вузол, відокремлений від розглянутого рівно одним ключем-роздільником) містить як мінімум t ключів, передамо в cі[х] ключ-роздільник між даними вузлом і його безпосереднім сусідом з x, на його місце помістимо крайній ключ із сусіднього вузла і перенесемо відповідний покажчик із сусіднього вузла в cі[х].
б) Якщо і cі[х] і обидва його безпосередніх сусіда містять по t — 1 ключів, об'єднаємо cі[х] з одним з його сусідів (при цьому колишній ключ-роздільник з x стане медіаною нового вузла).
Примітки
- Bayer, R.; McCreight, E. (July 1970). Organization and maintenance of large ordered indices (PDF). Proceedings of the 1970 ACM SIGFIDET (Now SIGMOD) Workshop on Data Description, Access and Control - SIGFIDET '70. Boeing Scientific Research Laboratories. с. 107. doi:10.1145/1734663.1734671. S2CID 26930249.
- Comer, 1979.
- ; (1972), (PDF), Acta Informatica, 1 (3): 173—189, doi:10.1007/bf00288683, архів оригіналу (PDF) за 10 червня 2017, процитовано 24 січня 2017
- (June 1979), The Ubiquitous B-Tree, Computing Surveys, 11 (2): 123—137, doi:10.1145/356770.356776, ISSN 0360-0300.
- Т. Кормен; Ч. Лейзерсон; Р. Рівест; К. Стайн (2009) [1990]. Вступ до алгоритмів (вид. 3rd). MIT Press і McGraw-Hill. ISBN .
- Folk, Michael J.; Zoellick, Bill (1992), File Structures (вид. 2nd), Addison-Wesley, ISBN
- Дональд Кнут. Sorting and Searching // The Art of Computer Programming. — 3rd. — Massachusetts : Addison–Wesley, 1998. — Т. 3. — 780 с. — .(англ.). Section 6.2.4: Multiway Trees, pp. 481–491. Also, pp. 476–477 of section 6.2.3 (Balanced Trees) discusses 2-3 trees.
Першоджерела
- ; (July 1970), (PDF), т. Mathematical and Information Sciences Report No. 20, Boeing Scientific Research Laboratories, архів оригіналу (PDF) за 14 серпня 2020, процитовано 24 січня 2017.
- (1971), , Proceedings of 1971 ACM-SIGFIDET Workshop on Data Description, Access and Control, San Diego, California, архів оригіналу за 31 серпня 2015, процитовано 24 січня 2017
Див. також
- Список структур даних
- Список алгоритмів
- Двійкове дерево пошуку
- Дерева пошуку
- Збалансоване дерево
- Червоно-чорне дерево
В іншому мовному розділі є повніша стаття B-tree(англ.). Ви можете допомогти, розширивши поточну статтю за допомогою з англійської.
|
Це незавершена стаття про інформаційні технології. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Ne plutati z binarne derevo B dereva angl B tree ce zbalansovana derevopodibna struktura danih yaka pidtrimuye vidsortovani dani ta dozvolyaye zdijsnyuvati poshuk poslidovnij dostup vstavki ta vidalennya v logarifmichnomu chasi B derevo uzagalnyuye dvijkove derevo poshuku dopuskayuchi vuzli z bilshe nizh dvoma dochirnimi elementami Na vidminu vid inshih samobalansuyuchih dvijkovih derev poshuku B derevo dobre pidhodit dlya sistem zberigannya danih yaki chitayut i zapisuyut vidnosno veliki bloki danih takih yak bazi danih i fajlovi sistemi B derevo zabezpechuye efektivne zberezhennya informaciyi na magnitnih diskah ta inshih pristroyah z pryamim dostupom B dereva shozhi na chervono chorni riznicya v tomu sho v B derevi vuzol mozhe mati bagato ditej na praktici do tisyachi zalezhno vid harakteristik vikoristovuvanogo diska Zavdyaki comu konstanta v ocinci O log n dlya visoti dereva mensha nizh dlya chervono chornih derev Yak i chervono chorni dereva B dereva dozvolyayut realizuvati bagato operacij z mnozhinami rozmiru n za chas O log n B tree Tip Derevo Vinajdeno 1970 Vinajshli en en Obchislyuvalna skladnist u zapisi velikogo O Serednya Najgirsha Prostir O n O n Poshuk O log n O log n Vstavlyannya O log n O log n Vidalennya O log n O log n Zobrazhennya B dereva Vuzol x yakij zberigaye n x klyuchiv maye n x 1 ditej Klyuchi sho zberigayutsya v x sluzhat granicyami sho rozdilyayut vsih jogo nashadkiv na n x 1 grup za kozhnu grupu vidpovidaye odin z nashadkiv x Pri poshuku v B derevi mi porivnyuyemo shukanij klyuch z n x klyuchami sho zberigayutsya v x i za rezultatami porivnyannya vibirayemo odnogo z n x 1 nashadkiv IstoriyaB derevo bulo rozroblene u 1972 roci en ta en Osoblivosti roboti z informaciyeyu sho rozmishuyetsya na diskuAlgoritmi sho pracyuyut z B derevami zberigayut v operativnij pam yati lishe neveliku chastinu vsiyeyi informaciyi fiksovane chislo sektoriv Disk rozglyadayetsya yak velika dilyanka pam yati robota z yakim vidbuvayetsya nastupnim chinom pered tim yak pracyuvati z ob yektom x vikonuyetsya specialna operaciya Disk Read x chitannya z diska Pislya vnesennya zmin v ob yekt x vikonuyetsya operaciya Disk Write x zapis na disk Chas roboti programi v osnovnomu viznachayetsya kilkistyu cih operacij tak sho maye sens chitati zapisuvati yak mozhna bilshe informaciyi za odin raz i zrobiti tak shob vuzol B dereva zapovnyuvav povnistyu odin sektor diska Takim chinom stupin rozgaluzhennya chislo ditej vuzla viznachayetsya rozmirom sektora Tipova stupin rozgaluzhennya B derev znahoditsya mizh 50 i 2000 v zalezhnosti vid rozmiru elementa Zbilshennya stupenya rozgaluzhennya rizko skorochuye visotu dereva i tim samim chislo zvernen do disku pri poshuku Napriklad B derevo stupenya 1001 i visoti 2 mozhe zberigati ponad milyard klyuchiv Vrahovuyuchi sho korin mozhna postijno zberigati v operativnij pam yati dostatno dvoh zvernen do diska pri poshuku potribnogo klyucha Vvazhayemo sho prikladna informaciya pov yazana z klyuchem zberigayetsya v tomu zh vuzli dereva Na praktici ce ne zavzhdi zruchno i v realnomu algoritmi vuzol mozhe mistiti lishe posilannya na sektor de vona zberigayetsya ViznachennyaZgidno z viznachennyam Knuta B derevo poryadku m ce derevo yake zadovolnyaye taki vlastivosti Kozhen vuzol maye shonajbilshe m nashadkiv Kozhen vnutrishnij vuzol maye prinajmni m 2 nashadkiv Kozhen nelistkovij vuzol maye prinajmni dvoh dochirnih vuzliv Usi listochki roztashovani na odnomu rivni Nelistovij vuzol z k dochirnimi elementami mistit k 1 klyuchiv Klyuchi kozhnogo vnutrishnogo vuzla diyut yak znachennya rozdilennya yaki rozdilyayut jogo piddereva Vnutrishni vuzli Vnutrishni vuzli ce vsi vuzli za vinyatkom listovih vuzliv i korenevogo vuzla Zazvichaj voni predstavleni u viglyadi vporyadkovanogo naboru elementiv i dochirnih pokazhchikiv Kozhen vnutrishnij vuzol mistit maksimum U nashadkiv i minimum L nashadkiv Takim chinom kilkist elementiv zavzhdi na 1 menshe nizh kilkist dochirnih pokazhchikiv kilkist elementiv znahoditsya mizh L 1 ta U 1 U maye buti abo 2L abo 2L 1 tomu kozhen vnutrishnij vuzol zapovnenij prinajmni napolovinu Zv yazok mizh U ta L oznachaye sho dva napivzapovneni vuzli mozhut buti ob yednani shob sklasti vuzol a odin povnij vuzol mozhna rozdiliti na dva vuzli yaksho ye misce shob pidshtovhnuti odin element do batkivskogo Ci vlastivosti dozvolyayut vidalyati ta vstavlyati novi znachennya v B derevo ta nalashtuvati derevo shob zberegti vlastivosti B dereva Korenevij vuzol Kilkist dochirnih elementiv korenevogo vuzla maye tu samu verhnyu mezhu sho j vnutrishni vuzli ale ne maye nizhnoyi mezhi Napriklad yaksho u vsomu derevi menshe nizh L 1 elementiv korin bude yedinim vuzlom u derevi u yakomu vzagali nemaye nashadkiv Listya Listya ce vuzli sho ye faktichnimi ob yektami danih abo fragmentami Inshi avtori takozh nazivayut listyam rivni vishe cih listiv B derevo glibini n 1 mozhe mistiti priblizno v U raziv bilshe elementiv nizh B derevo glibini n ale vartist operacij poshuku vstavki ta vidalennya zrostaye z glibinoyu dereva Yak i v bud yakomu zbalansovanomu derevi vartist zrostaye nabagato povilnishe nizh kilkist elementiv Deyaki zbalansovani dereva zberigayut znachennya lishe v listi i vikoristovuyut rizni tipi vuzliv dlya listya i vnutrishnih vuzliv B dereva zberigayut znachennya v kozhnomu vuzli dereva za vinyatkom listya B derevo B derevom nazivayut koreneve derevo vlashtovane nastupnim chinom Kozhen vuzol x mistit nastupni polya n x kilkist klyuchiv sho zberigayutsya u vuzli x key1 x key2 x keyn x x sami klyuchi v ne spadayuchomu poryadku leaf x buleve znachennya istinne koli vuzol x ye listom Yaksho x vnutrishnij vuzol to vin mistit pokazhchiki c1 x c2 x cn x 1 x na jogo ditej v kilkosti n x 1 U listiv ditej nemaye i ci polya dlya nih ne viznacheni Usi listya znahodyatsya na odnij i tij zhe glibini sho dorivnyuye visoti dereva Mozhliva kilkist klyuchiv sho zberigayutsya v odnomu vuzli viznachayetsya parametrom t 2 yake nazivayetsya minimalnim stupenem B dereva Dlya kozhnogo nekorenevogo vuzla x vikonuyetsya nerivnist t 1 n x 2t 1 Takim chinom chislo ditej u bud yakogo vnutrishnogo vuzla krim korenya znahoditsya v mezhah vid t do 2t Yaksho derevo ne puste to v koreni povinen zberigatisya hocha b odin klyuch Vuzol yakij zberigaye rivno 2t 1 klyuchiv bude nazivatisya povnim Klyuchi keyi x sluzhat granicyami sho rozdilyayut znachennya klyuchiv v pidderevah Tochnishe c1 x posilayetsya na pidderevo klyuchi v yakomu menshe nizh key1 x ci x pri i 2 3n posilayetsya na pidderevo klyuchi v yakomu znahodyatsya v mezhah vid keyi 1 x do keyi x cn x 1 x posilayetsya na pidderevo klyuchi v yakomu bilshe nizh keyn x x U vipadku koli t 2 u kozhnogo vnutrishnogo vuzla 2 3 abo 4 nashadka vihodit tak zvane 2 3 4 derevo Dlya efektivnoyi roboti z diskom na praktici t vibirayut dosit velikim Chislo zvernen do diska dlya bilshosti operacij proporcijno visoti B dereva Dlya visoti h displaystyle h B dereva z n displaystyle n elementami danih h log t n 1 2 displaystyle h leq log t left n 1 over 2 right Osnovni operaciyi z B derevamiKorin B dereva rozmishuyut v operativnij pam yati pri comu chitannya z diska dlya korenya nikoli ne potribno a prote vsyakij raz koli zminyuyetsya korin jogo zberigayut na disku Usi vuzli sho peredayutsya yak parametri vzhe zchitani z diska Vsi proceduri obroblyayut derevo za odin prohid vid korenya do listiv Poshuk v B derevi Poshuk v B derevi shozhij na poshuk v dvijkovomu derevi poshuku Riznicya v tomu sho v kozhnomu vuzli x vibirayetsya odin variant z n x 1 a ne z dvoh Pri poshuku proglyadayutsya vuzli dereva vid korenya do lista Tomu chislo zvernen do disku ye O h O logtn de h visota dereva a n kilkist klyuchiv Tak yak n x 2t to chas obchislen dorivnyuye O th O t logtn Stvorennya porozhnogo B dereva Stvorennya porozhnogo B dereva zdijsnyuyetsya za dopomogoyu proceduri yaka znahodit misce na disku dlya novogo vuzla ta rozmishuye jogo Ce mozhna realizuvati za chas O 1 i ne vikoristovuvati operaciyu chitannya z diska Dodavannya elementa v B derevo Dodavannya elementa v B derevo zdijsnyuyetsya z vikoristannyam proceduri rozbittya povnogo z 2t 1 klyuchami vuzla y na dva vuzli sho mayut po t 1 elementiv u kozhnomu Pri comu klyuch mediana key t y vidpravlyayetsya do batka x vuzla y i staye rozdilnikom dvoh otrimanih vuzliv Ce mozhlivo yaksho vuzol x ne vicherpnij Yaksho y korin procedura pracyuye analogichno V comu vipadku visota dereva zbilshuyetsya na odinicyu Procedura dodavannya novogo elementa prohodit odin raz vid korenya do lista na ce potriben chas O th O t logtn i O h zvernen do diska de h visota dereva Po hodu spravi podilyayutsya povni vuzli sho zustrichayutsya na shlyahu Zauvazhimo sho yaksho povnij vuzol maye nepovnogo batka to jogo mozhna rozdiliti tomu sho v batka ye misce dlya dodatkovogo klyucha tomu pidnimayuchis vgoru dohodimo do nepovnogo lista kudi i dodayemo novij element Vidalennya elementa Vidalennya elementa z B dereva vidbuvayetsya analogichno dodavannyu hocha trohi skladnishe Vidalennya klyucha z V dereva hocha i analogichno vstavci yavlyaye soboyu skladnishu zadachu Ce pov yazano z tim sho klyuch mozhe buti vidalenij z bud yakogo vuzla a ne tilki z lista a vidalennya z vnutrishnogo vuzla vimagaye pevnoyi perebudovi dochirnih vuzliv Yak i u vipadku vstavki mi povinni zabezpechiti shob pri vikonanni operaciyi vidalennya ne buli porusheni vlastivosti V dereva Analogichno tomu yak mi mali mozhlivist perekonatisya sho vuzli ne nadto silno zapovneni dlya vstavki novogo klyucha nam nalezhit perekonatisya sho vuzol ne staye zanadto malo zapovnenij v procesi vidalennya klyucha za vinyatkom korenevogo vuzla yakij mozhe mati menshe t 1 klyuchiv hocha i ne mozhe mati bilshe 2t 1 klyuchiv Otzhe nehaj procedura B TREE DELETE povinna vidaliti klyuch k z pidderevi korenem yakogo ye vuzol x Cya procedura rozroblena takim chinom sho pri yiyi rekursivnomu vikliku dlya vuzla h garantovana nayavnist v comu vuzli prinajmni t klyuchiv Cya umova vimagaye nayavnosti u vuzli bilshoyi kilkosti klyuchiv nizh minimalna v zvichajnomu V derevi tak sho inodi klyuch mozhe buti peremishenij v dochirnij vuzol pered tim yak rekursiya zvernetsya do cogo dochirnomu vuzlu Take posilennya vlastivosti V dereva nayavnist zapasnogo klyucha daye nam mozhlivist vikonati vidalennya klyucha za odin spadnij prohid po derevu z yedinim vinyatkom yakij bude poyasneno piznishe Slid takozh vrahuvati sho yaksho korin dereva h staye vnutrishnim vuzlom sho ne mistit zhodnogo klyucha taka situaciya mozhe viniknuti v rozglyanutih nizhche vipadkah 2v i 36 to vuzol h viddalyayetsya a jogo yedinij dochirnij vuzol S1 h staye novim korenem dereva pri comu zmenshuyetsya visota V dereva i zberigayetsya jogo vlastivist sho vimagaye shob korenevij vuzol neporozhnogo dereva mistiv yak minimum odin klyuch Zamist togo shob predstaviti vam povnij psevdokod proceduri vidalennya vuzla z V dereva mi prosto nakidayemo poslidovnist vikonuvanih dij 1 Yaksho vuzol k znahoditsya u vuzli x i x ye listom vidalyayemo k z h 2 Yaksho vuzol k znahoditsya u vuzli h i h ye vnutrishnim vuzlom vikonuyemo nastupni diyi a Yaksho dochirnij po vidnoshennyu do h vuzol u poperednij klyuchu k u vuzli x mistit ne menshe t klyuchiv to znahodimo do k poperednika k v pidderevi korenem yakogo ye u Rekursivno vidalyayemo k i zaminyuyemo k v h klyuchem k Poshuk klyucha k i vidalennya jogo mozhna vikonati v procesi odnogo spadnogo prohodu b Situaciya simetrichna situaciyi a yaksho dochirnij po vidnoshennyu do h vuzol z nastupnij za klyuchem k v vuzli x mistit ne menshe t klyuchiv to znahodimo k nastupnij za k klyuch v pidderevi korenem yakogo ye z Rekursivno vidalyayemo k i zaminyuyemo k v h klyuchem k Poshuk klyucha k i vidalennya jogo mozhna vikonati v procesi odnogo spadnogo prohodu v U protivnomu vipadku yaksho i y i z mistyat po t 1 klyuchiv vnosimo k i vsi klyuchi z v u pri comu z h vidalyayetsya k i pokazhchik na z a vuzol u pislya cogo mistit 2t 1 klyuchiv a potim zvilnyayemo z i rekursivno vidalyayemo k z u 3 Yaksho klyuch k vidsutnij u vnutrishnomu vuzli h znahodimo korin ci h piddereva yake povinno mistiti k yaksho takij klyuch ye v danomu V derevi Yaksho ci h mistit tilki t 1 klyuchiv vikonuyemo krok 3a abo 3b dlya togo shob garantuvati sho dali mi perehodimo v vuzol sho mistit yak minimum t klyuchiv Potim mi rekursivno vidalyayemo k z piddereva z korenem ci h a Yaksho ci h mistit tilki t 1 klyuchiv ale pri comu odin z yiyi bezposerednih susidiv pid yakim mi rozumiyemo dochirnij po vidnoshennyu do h vuzol vidokremlenij vid rozglyanutogo rivno odnim klyuchem rozdilnikom mistit yak minimum t klyuchiv peredamo v ci h klyuch rozdilnik mizh danimi vuzlom i jogo bezposerednim susidom z x na jogo misce pomistimo krajnij klyuch iz susidnogo vuzla i perenesemo vidpovidnij pokazhchik iz susidnogo vuzla v ci h b Yaksho i ci h i obidva jogo bezposerednih susida mistyat po t 1 klyuchiv ob yednayemo ci h z odnim z jogo susidiv pri comu kolishnij klyuch rozdilnik z x stane medianoyu novogo vuzla PrimitkiBayer R McCreight E July 1970 Organization and maintenance of large ordered indices PDF Proceedings of the 1970 ACM SIGFIDET Now SIGMOD Workshop on Data Description Access and Control SIGFIDET 70 Boeing Scientific Research Laboratories s 107 doi 10 1145 1734663 1734671 S2CID 26930249 Comer 1979 1972 PDF Acta Informatica 1 3 173 189 doi 10 1007 bf00288683 arhiv originalu PDF za 10 chervnya 2017 procitovano 24 sichnya 2017 June 1979 The Ubiquitous B Tree Computing Surveys 11 2 123 137 doi 10 1145 356770 356776 ISSN 0360 0300 T Kormen Ch Lejzerson R Rivest K Stajn 2009 1990 Vstup do algoritmiv vid 3rd MIT Press i McGraw Hill ISBN 0 262 03384 4 Folk Michael J Zoellick Bill 1992 File Structures vid 2nd Addison Wesley ISBN 0 201 55713 4 Donald Knut Sorting and Searching The Art of Computer Programming 3rd Massachusetts Addison Wesley 1998 T 3 780 s ISBN 0 201 89685 0 angl Section 6 2 4 Multiway Trees pp 481 491 Also pp 476 477 of section 6 2 3 Balanced Trees discusses 2 3 trees Pershodzherela July 1970 PDF t Mathematical and Information Sciences Report No 20 Boeing Scientific Research Laboratories arhiv originalu PDF za 14 serpnya 2020 procitovano 24 sichnya 2017 1971 Proceedings of 1971 ACM SIGFIDET Workshop on Data Description Access and Control San Diego California arhiv originalu za 31 serpnya 2015 procitovano 24 sichnya 2017Div takozhSpisok struktur danih Spisok algoritmiv Dvijkove derevo poshuku Dereva poshuku Zbalansovane derevo Chervono chorne derevo V inshomu movnomu rozdili ye povnisha stattya B tree angl Vi mozhete dopomogti rozshirivshi potochnu stattyu za dopomogoyu perekladu z anglijskoyi Divitis avtoperekladenu versiyu statti z movi anglijska Perekladach povinen rozumiti sho vidpovidalnist za kincevij vmist statti u Vikipediyi nese same avtor redaguvan Onlajn pereklad nadayetsya lishe yak korisnij instrument pereglyadu vmistu zrozumiloyu movoyu Ne vikoristovujte nevichitanij i nevidkorigovanij mashinnij pereklad u stattyah ukrayinskoyi Vikipediyi Mashinnij pereklad Google ye korisnoyu vidpravnoyu tochkoyu dlya perekladu ale perekladacham neobhidno vipravlyati pomilki ta pidtverdzhuvati tochnist perekladu a ne prosto skopiyuvati mashinnij pereklad do ukrayinskoyi Vikipediyi Ne perekladajte tekst yakij vidayetsya nedostovirnim abo neyakisnim Yaksho mozhlivo perevirte tekst za posilannyami podanimi v inshomovnij statti Dokladni rekomendaciyi div Vikipediya Pereklad Ce nezavershena stattya pro informacijni tehnologiyi Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi