T树相对于B +/-树有什么优势?

sim*_*onz 12 b-tree binary-search-tree data-structures

我已经探索了T树和B-/B +树的定义.从网上的论文中我了解到B-tree在分层内存中表现更好,例如磁盘驱动器和缓存内存.

我无法理解的是为什么T树甚至用于平坦记忆?

它们被宣传为AVL树的节省空间的替代品.

在最坏的情况下,T树的所有叶节点只包含一个元素,并且所有内部节点都包含允许的最小量,接近满.这意味着平均只使用分配空间的一半.除非我弄错了,当B树的节点半满时,这与B树的最坏情况相同.

假设两个树都在节点中本地存储密钥,但是使用指针来引用记录,唯一的区别是B树必须存储每个分支的指针.这通常会导致高达50%的开销或更少(超过T树),具体取决于密钥的大小.实际上,这接近于AVL树中预期的开销,假设没有父指针,嵌入在节点中的记录,嵌入在记录中的键.这是阻止我们使用B树的预期效率增益吗?

T树通常在AVL树之上实现.AVL树比B树更平衡.这可以与T树的应用相关联吗?

mar*_*omo 3

我可以给你一个个人故事,涵盖了一半的答案,也就是说,为什么我在大约 18 年前编写了一些 Pascal 代码来编程B+ 树。

我的目标系统是一台带有两个磁盘驱动器的 PC,我必须在非易失性存储器上存储索引,并且我想更好地了解我在大学所学的内容。我对商业软件包的性能非常不满意,可能是 DBase III,或者某些 Fox 产品,我不记得了。

无论如何:我需要这些操作:

  • 抬头
  • 插入
  • 删除
  • 下一项
  • 上一项

  • 索引的最大大小未知

  • 所以数据必须驻留在磁盘上
  • 每次获得支持的成本都很高
  • 读取整个块的成本与读取一个字节的成本相同

B+ 树让那台慢速的小 PC 真正飞过数据!

叶子有两个额外的指针,因此它们形成了一个双向链表,用于顺序搜索。