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