Каковы преимущества T-деревьев перед B +/- деревьями?

Я изучил определения T-деревьев и B- / B + деревьев. Из статей в Интернете я понимаю, что B-деревья лучше работают в иерархической памяти, такой как дисковые накопители и кэшированная память.

Я не могу понять, почему T-деревья использовались / используются даже для плоской памяти?

Они рекламируются как компактная альтернатива деревьям AVL.

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

Предполагая, что оба дерева хранят ключи локально в узлах, но используют указатели для ссылки на записи, единственное различие состоит в том, что B-деревья должны хранить указатели для каждой из ветвей. Обычно это вызывает до 50% накладных расходов или меньше (по T-деревьям), в зависимости от размера ключей. Фактически, это близко к накладным расходам, ожидаемым в деревьях AVL, при условии отсутствия родительского указателя, записей, встроенных в узлы, ключей, встроенных в записи. Это ожидаемое повышение эффективности, которое мешает нам использовать вместо этого B-деревья?

T-деревья обычно реализуются поверх деревьев AVL. Деревья AVL более сбалансированы, чем B-деревья. Может ли это быть связано с применением Т-деревьев?


person simeonz    schedule 29.01.2011    source источник


Ответы (2)


Я могу рассказать вам личную историю, которая покрывает половину ответа, то есть почему я написал код на Паскале для программирования B + деревья 18 лет назад.

моей целевой системой был ПК с двумя дисковыми накопителями, мне нужно было хранить индекс в энергонезависимой памяти, и я хотел лучше понять, что я изучал в университете. Я был очень недоволен производительностью коммерческого пакета, возможно, DBase III или какого-нибудь продукта Fox, я не могу вспомнить.

так или иначе: мне понадобились эти операции:

  • Погляди
  • вставка
  • удаление
  • следующий пункт
  • предыдущий пункт

  • максимальный размер индекса не известен

  • поэтому данные должны были находиться на диске
  • каждый доступ к поддержке стоил дорого
  • чтение целого блока стоит столько же, сколько чтение одного байта

B + -деревья заставили этот маленький медленный компьютер действительно летать через данные!

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

person mariotomo    schedule 11.02.2011
comment
Большое спасибо за ответ. Это первый, и я это ценю. Я оставлю вопрос открытым, если кто-то прокомментирует особенности Т-деревьев. Я знаю, что они вышли из моды, поэтому мало кто ими интересуется, но у них есть своя страница в Википедии. Я подумал, что у них должны быть какие-то оправдывающие черты. Еще раз спасибо. - person simeonz; 14.02.2011

На самом деле разница заключается в используемой вами системе. Как прокомментировал это мой наставник в университете: если ваша проблема заключается в нехватке памяти или в нехватке жесткого диска, вы определите, какое дерево и в какой реализации вы будете использовать. Скорее всего, это будет B + tree.

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

person Cninroh    schedule 25.02.2011