B ДЕРЕВО в структурі даних: пошук, вставка, видалення OperaПриклад

Що таке дерево B?

B Дерево це самобалансована структура даних, заснована на певному наборі правил для пошуку, вставки та видалення даних швидшим і ефективним способом пам’яті. Щоб досягти цього, дотримуйтесь наступних правил для створення B-дерева.

B-дерево — це особливий вид дерева в структурі даних. У 1972 році цей метод вперше представив МакКрейт, а компанія Bayer назвала його Height Balanced m-way Search Tree. Це допоможе вам зберегти дані, відсортовані та дозволені різні операції, такі як вставка, пошук і видалення, за менший час.

Правила для B-Tree

Ось важливі правила для створення B_Tree

  • Усі листочки будуть створені на одному рівні.
  • B-дерево визначається числом ступенів, яке також називається «порядком» (задається зовнішнім учасником, наприклад програмістом), відомим як
    m

    далі. Значення

    m

    залежить від розміру блоку на диску, на якому в основному розташовані дані.

  • Ліве піддерево вузла матиме менші значення, ніж права сторона піддерева. Це означає, що вузли також сортуються в порядку зростання зліва направо.
  • Максимальна кількість дочірніх вузлів, які може містити кореневий вузол, а також його дочірні вузли, обчислюються за цією формулою:
    m – 1

    Наприклад:

    m = 4
    max keys: 4 – 1 = 3
    

Правила для B-Tree

  • Кожен вузол, крім кореня, повинен містити мінімум ключів
    [m/2]-1

    Наприклад:

    m = 4
    min keys: 4/2-1 = 1
    
  • Максимальна кількість дочірніх вузлів, які може мати вузол, дорівнює його ступеня, тобто
    m
  • Мінімальна дочірня кількість, яку може мати вузол, становить половину порядку, тобто m/2 (береться максимальне значення).
  • Усі ключі у вузлі сортуються в порядку зростання.

Навіщо використовувати B-Tree

Ось причини використання B-Tree

  • Зменшує кількість читань диска
  • B Дерева можна легко оптимізувати, щоб налаштувати їх розмір (тобто кількість дочірніх вузлів) відповідно до розміру диска
  • Це спеціально розроблена техніка для роботи з великою кількістю даних.
  • Це корисний алгоритм для баз даних і файлових систем.
  • Хороший вибір, якщо мова йде про читання та запис великих блоків даних

Історія B Tree

  • Дані зберігаються на диску в блоках, ці дані, коли вони переміщуються в основну пам'ять (або оперативну пам'ять), називають структурою даних.
  • У разі великого обсягу даних пошук одного запису на диску вимагає читання всього диска; це збільшує споживання часу та основної пам'яті через високу частоту доступу до диска та розмір даних.
  • Щоб подолати це, створюються таблиці індексів, які зберігають посилання на записи на основі блоків, у яких вони розміщені. Це значно скорочує споживання часу та пам’яті.
  • Оскільки ми маємо величезні дані, ми можемо створювати багаторівневі таблиці індексів.
  • Багаторівневий індекс можна розробити за допомогою B Tree для збереження даних, відсортованих у спосіб самозбалансування.

Пошук Operaції

Операція пошуку є найпростішою операцією на дереві B.

Застосовується наступний алгоритм:

  • Нехай ключ (значення) для пошуку за «k».
  • Почніть пошук із кореня та рекурсивно переходьте вниз.
  • Якщо k менше кореневого значення, шукайте ліве піддерево, якщо k більше кореневого значення, шукайте праве піддерево.
  • Якщо вузол має знайдене k, просто поверніть вузол.
  • Якщо k не знайдено у вузлі, перейдіть до дочірнього елемента з більшим ключем.
  • Якщо k не знайдено в дереві, ми повертаємо NULL.

Insert Operaції

Оскільки B Tree є самобалансуючим деревом, ви не можете примусово вставити ключ у будь-який вузол.

Застосовується наступний алгоритм:

  • Запустіть операцію пошуку та знайдіть відповідне місце вставки.
  • Вставте новий ключ у належне місце, але якщо вузол уже має максимальну кількість ключів:
  • Вузол разом із щойно вставленим ключем відокремиться від середнього елемента.
  • Середній елемент стане батьківським для двох інших дочірніх вузлів.
  • Вузли повинні переставити ключі в порядку зростання.
TIP Наступне не вірно щодо алгоритму вставки:

Оскільки вузол заповнений, він розділиться, а потім буде вставлено нове значення

Insert Operaції

У наведеному вище прикладі:

  • Знайдіть відповідну позицію у вузлі для ключа
  • Вставте ключ у цільовий вузол і перевірте наявність правил
  • Після вставки вузол має більше ніж мінімальну кількість ключів, яка дорівнює 1? У цьому випадку так. Перевірте наступне правило.
  • Чи має вузол після вставки більше максимальної кількості ключів, яка становить 3? У цьому випадку ні, не так. Це означає, що дерево B не порушує жодних правил, і вставлення завершено.

Insert Operaції

У наведеному вище прикладі:

  • Вузол досяг максимальної кількості ключів
  • Вузол розділиться, а середній ключ стане кореневим вузлом двох інших вузлів.
  • У разі парної кількості ключів середній вузол буде вибрано за лівим або правим зміщенням.

Insert Operaції

У наведеному вище прикладі:

  • Вузол має менше максимальної кількості ключів
  • 1 вставляється поруч із 3, але порушується правило зростання
  • Щоб це виправити, ключі сортуються

Подібним чином, 13 і 2 можна легко вставити у вузол, оскільки вони відповідають правилу для вузлів, менших за максимальну кількість ключів.

Insert Operaції

У наведеному вище прикладі:

  • Вузол має ключі, що дорівнюють max ключам.
  • Ключ вставлено до цільового вузла, але це порушує правило максимальної кількості ключів.
  • Цільовий вузол розділено, а середній ключ за лівим ухилом тепер є батьківським для нових дочірніх вузлів.
  • Нові вузли розташовані в порядку зростання.

Так само, на основі наведених вище правил і випадків, решту значень можна легко вставити в дерево B.

Insert Operaції

видаляти Operaції

Операція видалення має більше правил, ніж операції вставки та пошуку.

Застосовується наступний алгоритм:

  • Запустіть операцію пошуку та знайдіть цільовий ключ у вузлах
  • Застосовуються три умови залежно від розташування цільового ключа, як пояснюється в наступних розділах

Якщо цільовий ключ знаходиться в листовому вузлі

  • Target знаходиться в кінцевому вузлі, більше ніж min ключів.
  • Видалення цього не порушить властивість B Tree
  • Target знаходиться в кінцевому вузлі, він має мінімальні ключові вузли
  • Видалення цього порушить властивість B Tree
  • Target вузол може запозичити ключ від безпосереднього лівого вузла або безпосереднього правого вузла (брата)
  • Брат скаже так якщо він має більше мінімальної кількості ключів
  • Ключ буде запозичено з батьківського вузла, максимальне значення буде передано батьківському вузлу, максимальне значення батьківського вузла буде передано цільовому вузлу, а цільове значення буде видалено
  • Target знаходиться в кінцевому вузлі, але жоден із братів і сестер не має більше ніж мінімальну кількість ключів
  • Пошук ключа
  • Злиття з братами та мінімальною кількістю батьківських вузлів
  • Загальна кількість ключів тепер буде більше мін
  • Цільовий ключ буде замінено мінімумом батьківського вузла

Якщо цільовий ключ знаходиться у внутрішньому вузлі

  • Виберіть або попередника за порядком, або наступника за порядком
  • У випадку попередника в порядку, буде обрано максимальний ключ з його лівого піддерева
  • У випадку порядкового наступника буде обрано мінімальний ключ із його правого піддерева
  • Якщо порядковий попередник цільового ключа має більше ніж min ключів, лише тоді він може замінити цільовий ключ максимальним порядковим попередником
  • Якщо попередник цільового ключа в порядку не має більше ніж min ключів, знайдіть мінімальний ключ наступника в порядку.
  • Якщо порядковий попередник і наступник цільового ключа мають менше ніж min ключів, тоді об’єднайте попередника та наступника.

Якщо цільовий ключ знаходиться в кореневому вузлі

  • Замінити максимальним елементом піддерева попередника в порядку
  • Якщо після видалення ціль має менше ніж min ключів, тоді цільовий вузол запозичить максимальне значення від свого брата через батьківського вузла брата.
  • Максимальне значення батьківського елемента буде взято цільовим елементом, але з вузлами максимального значення братнього.

Тепер розберемо операцію видалення на прикладі.

видаляти Operaції

Наведена вище діаграма відображає різні випадки операції видалення в B-дереві. Це B-дерево має порядок 5, що означає, що мінімальна кількість дочірніх вузлів, які може мати будь-який вузол, дорівнює 3, а максимальна кількість дочірніх вузлів, які може мати будь-який вузол, дорівнює 5. Тоді як мінімальна та максимальна кількість ключів будь-якого вузла може мати 2 і 4 відповідно.

видаляти Operaції

У наведеному вище прикладі:

  • Цільовий вузол має цільовий ключ для видалення
  • Цільовий вузол має більше ключів, ніж мінімальний
  • Просто видаліть ключ

видаляти Operaції

У наведеному вище прикладі:

  • Цільовий вузол має ключі, рівні мінімальним ключам, тому не можна видалити його безпосередньо, оскільки це порушить умови

Тепер на наступній схемі пояснюється, як видалити цей ключ:

видаляти Operaції

  • Цільовий вузол запозичить ключ у найближчого брата, у цьому випадку, попередника за порядком (лівого брата), оскільки він не має наступника за порядком (правого брата)
  • Максимальне значення попередника в порядку буде передано батьківському вузлу, а той передасть максимальне значення цільовому вузлу (див. діаграму нижче)

У наведеному нижче прикладі показано, як видалити ключ, який потребує значення, із його наступника за порядком.

видаляти Operaції

  • Цільовий вузол запозичить ключ у найближчого брата, у цьому випадку, наступника за порядком (правого брата), оскільки його попередник за порядком (лівого брата) має ключі, рівні мінімальним ключам.
  • Мінімальне значення наступника за порядком буде передано батьківському вузлу, а батьківський вузол передасть максимальне значення цільовому вузлу.

У наведеному нижче прикладі цільовий вузол не має брата, який може передати свій ключ цільовому вузлу. Тому потрібне об’єднання.

Подивіться процедуру видалення такого ключа:

видаляти Operaції

  • Об’єднайте цільовий вузол з будь-яким із його безпосередніх братів і сестер разом із батьківським ключем
  • Вибирається ключ батьківського вузла, який знаходиться між двома об’єднаними вузлами
  • Видаліть цільовий ключ із об’єднаного вузла

видаляти OperaПсевдокод

private int removeBiggestElement()
{
    if (root has no child)
        remove and return the last element
    else {
        answer = subset[childCount-1].removeBiggestElement()
        if (subset[childCount-1].dataCount < MINIMUM)
            fixShort (childCount-1)
        return answer
    }
}

Вихід:

Найбільший елемент видаляється з B-дерева.

Підсумки

  • B Tree — це самобалансуюча структура даних для кращого пошуку, вставки та видалення даних із диска.
  • B Дерево регулюється зазначеним ступенем
  • B Ключі та вузли дерева розташовані в порядку зростання.
  • Операція пошуку B Tree є найпростішою, яка завжди починається з кореня і починає перевіряти, чи цільовий ключ більший або менший за значення вузла.
  • Операція вставки B Tree досить детальна, яка спочатку знаходить відповідну позицію вставки для цільового ключа, вставляє його, оцінює валідність B Tree порівняно з різними випадками, а потім відповідно реструктурує вузли B Tree.
  • Операція видалення B Tree спочатку шукає цільовий ключ, який потрібно видалити, видаляє його, оцінює дійсність на основі кількох випадків, таких як мінімальний і максимальний ключі цільового вузла, братів і сестер і батьківського вузла.