удаление на B+ дереве

Будучи студентом, я пытался сам реализовать дерево B+ на C. Вставка в порядке, но удаление меня сдерживает. Один из моих вопросов таков: можно ли оставаться ключом во внутреннем узле, когда его ключ в листовом узле был удален? Это может произойти, когда внутренний узел не является родителем листа. Достаточно ли понятно мое описание? Есть ли у кого-нибудь подобный опыт?


person manuzhang    schedule 09.07.2011    source источник
comment
Вы хотите ответ да или нет? Это домашнее задание?   -  person Gigamegs    schedule 09.07.2011
comment
Можно ли оставаться ключом... Ты имеешь в виду оставить ключ...? Эта фраза сбила меня с толку.   -  person Joey Adams    schedule 09.07.2011


Ответы (1)


Вопрос, который вы должны задать себе при работе со структурой данных: «Что такое инварианты?» Для дерева B+ некоторые из инвариантов таковы:

  • Записи хранятся в листовых узлах,
  • Листовые узлы должны быть заполнены как минимум наполовину.

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

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

person Dietrich Epp    schedule 09.07.2011