Какой правильный и стандартный способ вставить элемент с использованием дерева B +? - PullRequest
0 голосов
/ 26 января 2019

Проблема в том, что существует множество различий в ответах b + tree, из-за их разных алгоритмов b + tree.

Я нашел несколько разных алгоритмов вставки дерева b + из Интернета. показано ниже.

Алгоритм 1

https://imgur.com/a/uTtZBb2

Алгоритм 2

https://imgur.com/a/eMpvON5

Алгоритм 3

https://imgur.com/a/YznNLwm

Алгоритм 4

https://imgur.com/a/dxk6H27

Я пробовал 2 вопроса получить из библиотеки. Есть 2 возможных ответа, это смутило меня.

https://imgur.com/a/yXW0gYQ

Есть ли точный ответ или есть несколько возможных ответов для дерева b +?

* Извините, я не могу вставить изображение из-за недостаточно репутации.

1 Ответ

0 голосов
/ 26 января 2019

Я предлагаю вам посмотреть первое изображение, а последнее . более простой для понимания алгоритм благодаря диаграммным примерам. Не многократные ответы, все изображения показывают один и тот же алгоритм, но они могут использовать разные обозначения. Основная идея дерева B + проста.

Первая вставка ключей L + 1 до создания корневого узла:

1. | Начиная с того, сколько ключей вы хотите иметь в своем узле? Предположим, что L - это длина узла (то есть количество ключей в узле), например, L = 4. Вы начинаете вставлять ключи в узел, и каждый раз, когда вы вставляете новый ключ в узел, вы сортируете их (сортируете каждый раз, когда вставляете новый ключ, кроме первого раза).

2. | тогда у вас есть оператор if, проверяющий, заполнен ли узел, или 4 ключа в узле (используйте счетчик и увеличивайте его для каждой вставки, затем сравнивайте его с L).

3. | Если узел полностью разделен пополам, создайте временный узел, в который вы добавите средний ключ и создадите два новых узла, соединенных друг с другом, а также соединенных с первым.

После вставки ключей L + 1:

Вы строите свое дерево снизу вверх. Начиная с листовых узлов

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

Базовая функциональность, которую вам необходимо выполнить для вставки в дерево B +: a) search_method () , b) short_method () и затем c) вставка () см. также связанный список, как это работает

...