2016-07-05 2 views
0

Im изучение B дерева и в книге они сказали, что:B-tree: удалить нелистовой узел?

  1. Если ключ к находится в узле х и х представляет собой лист, удалить ключ к от х.

  2. Если ключ k находится в узле x и x является внутренним узлом, выполните следующие действия.

a. Если дочерний y, который предшествует k в узле x, имеет не менее t ключей, тогда найдите предшественник k 'k в поддереве, укорененном в y. Рекурсивно удалим k 'и заменим k на k' по x. (Поиск k 'и его удаление могут выполняться в одном проходе вниз.)

b. Симметрично, если дочерний z, следующий за k в узле x, имеет не менее t ключей, затем найдите преемника k 'k в поддереве, корневом в z. Рекурсивно удалим k 'и заменим k на k' по x. (Поиск k 'и его удаление могут выполняться в одном проходе вниз.)

c. В противном случае, если оба y и z имеют только t-1 ключей, объедините k и все z в y, так что x теряет и k, и указатель на z, а y теперь содержит 2t-1 ключей. Затем, свободный z и рекурсивно удаляем k из y.

Мой вопрос в том, что в случае 2.a. Может ли кто-нибудь объяснить мне пример: рекурсивно удалить k 'и заменить k на k' в x.

С уважением.

ответ

1

Предположим, у вас есть б дерево со степенью т = 4:

26,  49,  60 
27,31,34,36  51,55,56,58 

Пусть y = [27,31,34,36], x = [51,55,56,58] не являются листовые узлы, и вы хотите удалить ключ k = 51. Пусть K = 49 является ключом в родительском узле, который разбивает x и y.

Найти предшественника k, который находится в поддереве y крайнюю правую клавишу k' (который может содержать целые числа от 37 до 48 в этом примере, скажем k' = 40). Установите k = K = 49 и K = k' = 40 и удалите k' рекурсивно (что на самом деле является первым случаем процедуры удаления, когда узел является листом). Полученное дерево b выглядит как

26,  40,  60 
27,31,34,36  49,55,56,58 
+0

Отличное описание. Вставка и особенно удаление в B-деревья может быть очень сложной процедурой, включающей «перекатывание» многих узлов вверх и вниз по дереву. Алгоритмы значительно усложняются желанием * держать * дерево более или менее «в балансе» все время. Поэтому вставка и удаление являются очень дорогостоящими операциями, поэтому поиски остаются неизменно быстрыми. –

+0

Откуда у вас 40? Это было не там, когда вы начали удалять 49 ... – DarthGizka

+0

40 является 'k'', предшественником' k', не показано на диаграмме, но это самый правый ключ 'y', предположительно в некоторых из Дети 'y' (комментарий в скобках в ответе). – karastojko

Смежные вопросы