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

Что такое B-дерево?

Б Дерево представляет собой самобалансирующуюся структуру данных, основанную на определенном наборе правил для поиска, вставки и удаления данных более быстрым и эффективным способом использования памяти. Для этого при создании B-дерева соблюдаются следующие правила.

B-дерево — это особый вид дерева в структуре данных. В 1972 году этот метод был впервые представлен МакКрайтом, и Байер назвал его «Дерево поиска со сбалансированной высотой m-way». Это помогает вам сохранять данные отсортированными и позволяет выполнять различные операции, такие как вставка, поиск и удаление, за меньшее время.

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

Вот важные правила создания B_Tree.

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

    далее. Значение

    m

    зависит от размера блока на диске, на котором в основном расположены данные.

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

    Например:

    m = 4
    max keys: 4 – 1 = 3
    

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

  • Каждый узел, кроме корневого, должен содержать минимум ключей
    [m/2]-1

    Например:

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

Зачем использовать B-дерево

Вот причины использования B-Tree

  • Уменьшает количество операций чтения с диска.
  • B-деревья можно легко оптимизировать, чтобы настроить их размер (то есть количество дочерних узлов) в соответствии с размером диска.
  • Это специально разработанный метод для обработки больших объемов данных.
  • Это полезный алгоритм для баз данных и файловых систем.
  • Хороший выбор, когда дело доходит до чтения и записи больших блоков данных.

История B-Дерева

  • Данные хранятся на диске блоками, эти данные, когда они помещаются в основную память (или ОЗУ), называются структурой данных.
  • В случае огромных данных поиск одной записи на диске требует чтения всего диска; это увеличивает потребление времени и основной памяти из-за высокой частоты доступа к диску и размера данных.
  • Чтобы преодолеть эту проблему, создаются индексные таблицы, в которых сохраняются ссылки на записи на основе блоков, в которых они находятся. Это радикально снижает потребление времени и памяти.
  • Поскольку у нас огромные данные, мы можем создавать многоуровневые индексные таблицы.
  • Многоуровневый индекс можно создать с помощью B-дерева для самобалансирующейся сортировки данных.

Поиск Operaпроизводство

Операция поиска — самая простая операция в B-дереве.

Применяется следующий алгоритм:

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

Вставить Operaпроизводство

Поскольку B-дерево является самобалансирующимся деревом, вы не можете принудительно вставить ключ в любой узел.

Применяется следующий алгоритм:

  • Запустите операцию поиска и найдите подходящее место вставки.
  • Вставьте новый ключ в нужное место, но если узел уже имеет максимальное количество ключей:
  • Узел вместе с вновь вставленным ключом отделится от среднего элемента.
  • Средний элемент станет родительским для двух других дочерних узлов.
  • Узлы должны переставить ключи в порядке возрастания.
СОВЕТ В отношении алгоритма вставки неверно следующее:

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

Вставить Operaпроизводство

В приведенном выше примере:

  • Найдите подходящую позицию в узле для ключа.
  • Вставьте ключ в целевой узел и проверьте наличие правил.
  • Имеет ли узел после вставки более чем минимальное количество ключей, равное 1? В данном случае да, так и есть. Проверьте следующее правило.
  • Имеет ли узел после вставки количество ключей, превышающее максимальное, равное 3? В данном случае нет, не так. Это означает, что B-дерево не нарушает никаких правил и вставка завершена.

Вставить Operaпроизводство

В приведенном выше примере:

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

Вставить Operaпроизводство

В приведенном выше примере:

  • Узел имеет меньше максимального количества ключей
  • 1 вставлена ​​рядом с 3, но правило возрастания нарушено
  • Чтобы это исправить, ключи отсортированы

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

Вставить Operaпроизводство

В приведенном выше примере:

  • Узел имеет ключи, равные максимальному количеству ключей.
  • Ключ вставлен в целевой узел, но это нарушает правило максимального количества ключей.
  • Целевой узел разделен, и средний ключ с левым смещением теперь является родительским для новых дочерних узлов.
  • Новые узлы располагаются в порядке возрастания.

Аналогичным образом, на основе приведенных выше правил и случаев, остальные значения можно легко вставить в B-дерево.

Вставить Operaпроизводство

Удалить Operaпроизводство

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

Применяется следующий алгоритм:

  • Запустите операцию поиска и найдите целевой ключ в узлах.
  • Три условия применяются в зависимости от местоположения целевого ключа, как описано в следующих разделах.

Если целевой ключ находится в конечном узле

  • Target находится в конечном узле, более минимального количества ключей.
  • Удаление этого не нарушит свойства B Tree.
  • Target находится в листовом узле, имеет минимальное количество ключевых узлов
  • Удаление нарушит собственность B Tree.
  • Target узел может заимствовать ключ у непосредственного левого узла или непосредственно у правого узла (родственного узла)
  • Брат или сестра скажет Да если у него больше минимального количества ключей
  • Ключ будет заимствован у родительского узла, максимальное значение будет передано родительскому узлу, максимальное значение родительского узла будет передано целевому узлу и удалено целевое значение.
  • Target находится в листовом узле, но ни один из братьев и сестер не имеет более минимального количества ключей
  • Поиск ключа
  • Слияние с братьями и сестрами и минимумом родительских узлов
  • Общее количество ключей теперь будет больше минуты.
  • Целевой ключ будет заменен минимумом родительского узла.

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

  • Выбирайте либо предшественника по порядку, либо преемника по порядку.
  • В случае, если предшественник находится в порядке, будет выбран максимальный ключ из его левого поддерева.
  • В случае преемника по порядку будет выбран минимальный ключ из его правого поддерева.
  • Если предшественник целевого ключа по порядку имеет больше, чем минимальное количество ключей, только тогда он может заменить целевой ключ максимальным ключом предшественника по порядку.
  • Если у упорядоченного предшественника целевого ключа не более минимального количества ключей, найдите минимальный ключ упорядоченного преемника.
  • Если предшественник и преемник целевого ключа имеют порядок ключей меньше минимального, то необходимо объединить предшественника и преемника.

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

  • Заменить максимальным элементом поддерева предшественника по порядку.
  • Если после удаления целевой узел имеет меньше минимального количества ключей, то целевой узел заимствует максимальное значение у своего родственного узла через родителя родственного узла.
  • Максимальное значение родителя будет принято целью, но с узлами максимального значения родственного элемента.

Теперь давайте разберемся с операцией удаления на примере.

Удалить 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-дереве является самой простой, она всегда начинается с корня и проверяет, больше или меньше целевой ключ значения узла.
  • Операция вставки B-дерева довольно подробная: сначала находит подходящую позицию вставки для целевого ключа, вставляет ее, оценивает достоверность B-дерева для различных случаев, а затем соответствующим образом реструктурирует узлы B-дерева.
  • Операция удаления B-дерева сначала ищет целевой ключ, который нужно удалить, удаляет его, оценивает достоверность на основе нескольких случаев, таких как минимальный и максимальный ключи целевого узла, одноуровневых узлов и родителя.