Как удалить элемент из b-дерева?

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

Может ли кто-нибудь объяснить алгоритм или указать мне ресурс, который объясняет, как это делается?


person Mathieu Pagé    schedule 03.03.2011    source источник
comment
Ха-ха, правда: я также заметил, что большинство книг оставляют удаление в B-дереве «в качестве упражнения для читателя»… эти ублюдки. ;-)   -  person Konrad Rudolph    schedule 03.03.2011


Ответы (4)


Объяснение этому есть на странице Википедии. B-дерево — удаление

person Bill the Lizard    schedule 03.03.2011

Если у вас его еще нет, я настоятельно рекомендую Carmen & al Introduction to Algorithms 3rd Edition.

Это не описывается, потому что операции естественным образом вытекают из свойств B-Tree.

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

Если вы объединяетесь с соседом, вам нужно удалить элемент в родительском узле, который запускает тот же алгоритм. И вы применяете рекурсивно, пока не доберетесь до вершины.

У B-Tree нет перебалансировки (по крайней мере, не у тех, что я видел), поэтому это гораздо проще, чем поддерживать красно-черное дерево или дерево AVL, и, вероятно, поэтому люди не чувствовали себя обязанными писать об удалении.

person Matthieu M.    schedule 03.03.2011

О каких б-деревьях вы говорите? С сросшимися листьями или нет? Также существуют разные способы удаления элемента (сверху-вниз, снизу-вверх и т.д.). Этот документ может помочь: B-деревья, затенение и клоны (даже хотя есть много вещей, связанных с файловой системой).

person sakisk    schedule 03.03.2011

Пример удаления из CLRS (2-е издание) доступен здесь: http://ysangkok.github.io/js-clrs-btree/btree.html

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

person Janus Troelsen    schedule 29.12.2013