logo

B+ Дерево

B+ Tree є розширенням B Tree, яке забезпечує ефективне вставлення, видалення та пошук.

У дереві B ключі та записи можна зберігати як у внутрішніх, так і в листових вузлах. Тоді як у дереві B+ записи (дані) можуть зберігатися лише на листових вузлах, тоді як внутрішні вузли можуть зберігати лише ключові значення.

Листові вузли дерева B+ пов’язані між собою у формі однозв’язаних списків, щоб зробити пошукові запити більш ефективними.

B+ Tree використовується для зберігання великої кількості даних, які не можуть зберігатися в основній пам'яті. Через те, що розмір основної пам’яті завжди обмежений, внутрішні вузли (ключі доступу до записів) дерева B+ зберігаються в основній пам’яті, тоді як листові вузли зберігаються у вторинній пам’яті.

Внутрішні вузли дерева B+ часто називають вузлами індексу. Дерево B+ порядку 3 показано на наступному малюнку.


B+ Дерево

Переваги B+ Tree

  1. Записи можна отримати за однакову кількість звернень до диска.
  2. Висота дерева залишається збалансованою і меншою порівняно з деревом B.
  3. Ми можемо отримати доступ до даних, що зберігаються в дереві B+, як послідовно, так і безпосередньо.
  4. Ключі використовуються для індексації.
  5. Швидші пошукові запити, оскільки дані зберігаються лише на листових вузлах.
B+ Переваги дерева

B Tree VS B+ Tree

SN B Дерево B+ Дерево
1 Ключі пошуку не можна повторно зберігати. Можуть бути присутні надлишкові ключі пошуку.
2 Дані можуть зберігатися як у листових вузлах, так і у внутрішніх вузлах Дані можуть зберігатися лише на листових вузлах.
3 Пошук деяких даних є повільнішим процесом, оскільки дані можна знайти на внутрішніх вузлах, а також на кінцевих вузлах. Пошук порівняно швидший, оскільки дані можна знайти лише на листових вузлах.
4 Видалення внутрішніх вузлів є дуже складним і трудомістким. Видалення ніколи не буде складним процесом, оскільки елемент завжди видалятиметься з листових вузлів.
5 Листові вузли не можуть бути пов'язані між собою. Листові вузли пов’язані разом, щоб зробити пошукові операції більш ефективними.

Вставка в дерево B+

Крок 1: Вставте новий вузол як листовий вузол

if else цикл у java

крок 2: Якщо аркуш не має необхідного місця, розділіть вузол і скопіюйте середній вузол до наступного індексного вузла.

крок 3: Якщо вузол індексу не має необхідного місця, розділіть вузол і скопіюйте середній елемент на наступну сторінку індексу.

приклад:

Вставте значення 195 у дерево B+ порядку 5, показане на наступному малюнку.


B + Дерево

195 буде вставлено в праве піддерево 120 після 190. Вставте його в потрібне місце.


B + Дерево

Вузол містить більше максимальної кількості елементів, тобто 4, тому розділіть його та розмістіть середній вузол до батьківського.


B + Дерево

Тепер вузол індексу містить 6 дочірніх елементів і 5 ключів, що порушує властивості дерева B+, тому нам потрібно його розділити, як показано нижче.


B + Дерево

Видалення в дереві B+

Крок 1: Видаліть ключ і дані з листків.

крок 2: якщо кінцевий вузол містить менше мінімальної кількості елементів, об’єднайте вузол із його братом і видаліть ключ між ними.

крок 3: якщо вузол індексу містить менше мінімальної кількості елементів, об’єднайте вузол із братом і перемістіть ключ між ними вниз.

приклад

Видаліть ключ 200 із дерева B+, показаного на малюнку нижче.


B + Дерево

200 присутній у правому піддереві 190, після 195. видаліть його.


B + Дерево

Об’єднайте два вузли за допомогою 195, 190, 154 і 129.


B + Дерево

Тепер елемент 120 є єдиним елементом у вузлі, який порушує властивості дерева B+. Тому нам потрібно об’єднати його за допомогою 60, 78, 108 і 120.

Тепер висота дерева B+ буде зменшена на 1.


B + Дерево