B-дерево в структуре данных: поиск, вставка, удаление

⚡ Умное резюме

B-дерево в структурах данных — это самобалансирующееся дерево, которое поддерживает данные в отсортированном состоянии для быстрого поиска, вставки и удаления данных на диске. В книге объясняются правила работы B-дерева, его история, а также алгоритмы поиска, вставки и удаления с примерами.

  • ???? Самобалансировка: Сорт B-Tree поддерживает все листья на одном уровне и сохраняет равновесие на протяжении всей операции.
  • 🔢 Заказ (м): Степень m определяет максимальное количество дочерних элементов (m) и ключей (m − 1) на узел.
  • 🔍 Поиск: Поиск начинается с корня и перемещается влево или вправо путем сравнения с ключом.
  • Вставьте: Функция вставки находит нужное место и отделяет целый узел от его центрального ключа.
  • Удалить: Удаление обрабатывает конечные, внутренние и корневые случаи с помощью заимствования и слияния.

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

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

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

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

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

Вот важные правила для создания B-дерева:

  • Все листья будут созданы на одном уровне.
  • 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-дерево для управленияping Данные отсортированы таким образом, что происходит самобалансировка.

Поиск 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-дерева.
  • Target Находится в листовом узле и содержит узлы с минимальным ключом. Удаление этого узла нарушит свойство B-дерева.
  • Целевой узел может заимствовать ключ у непосредственно расположенного слева узла или непосредственно расположенного справа узла (родственного узла).
  • Брат или сестра скажет Да если количество ключей превышает минимальное.
  • Ключ будет заимствован у родительского узла, максимальное значение будет передано родительскому узлу, максимальное значение родительского узла будет передано целевому узлу, а целевое значение будет удалено.
  • Target Если в листовом узле находится элемент, но ни у одного из его соседей нет больше минимального количества ключей: выполняется поиск ключа, объединение с соседними узлами и минимальным количеством ключей родительского узла, общее количество ключей теперь будет больше минимального, и целевой ключ будет заменен минимальным ключом родительского узла.

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

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

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

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

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

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

На приведенной выше диаграмме показаны различные случаи операции удаления в B-дереве. Это B-дерево имеет порядок 5, что означает, что минимальное количество дочерних узлов, которое может иметь любой узел, равно 3, а максимальное количество дочерних узлов, которое может иметь любой узел, равно 5. При этом минимальное и максимальное количество ключей, которые может иметь любой узел, равны 2 и 4 соответственно.

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

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

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

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

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

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

Следующая диаграмма объясняет, как удалить этот ключ:

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

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

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

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

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

В приведенном ниже примере у целевого узла нет ни одного соседнего узла, который мог бы передать свой ключ целевому узлу. Поэтому требуется слияние. См. процедуру удаления такого ключа:

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

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

Удалить Operaпсевдо- Code

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-дерева.

Часто задаваемые вопросы (FAQ)

Да. Инструменты искусственного интеллекта могут генерировать пошаговые диаграммы или анимации вставок, разделений и удалений для заданного порядка. Это помогает обучающимся увидеть, как дерево перебалансируется, хотя каждый шаг следует проверять на соответствие правилам B-дерева.

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

Узел бинарного дерева поиска имеет не более двух дочерних узлов и один ключ. Узел B-дерева может содержать много ключей и много дочерних узлов, ключей и ключей.ping Дерево короткое и уменьшает количество операций чтения с диска, что делает его идеальным для баз данных и файловых систем.

Поиск, вставка и удаление каждой последовательности выполняются за время O(log n), где n — количество ключей. Поскольку каждый узел содержит множество ключей, дерево остается неглубоким, поэтому количество обращений к диску очень мало.

Подведем итог этой публикации следующим образом: