удаление на дереве B + - PullRequest
3 голосов
/ 09 июля 2011

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

1 Ответ

3 голосов
/ 09 июля 2011

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

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

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

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

...