我已经探讨了T-trees和B- / B +树的定义。从网上的论文中我了解到B树在分层内存中表现更好,例如磁盘驱动器和缓存内存。
我无法理解为什么T树甚至用于平坦记忆?
它们被宣传为AVL树的节省空间的替代品。
在最坏的情况下,T树的所有叶节点只包含一个元素,并且所有内部节点都包含允许的最小量,接近满。这意味着平均只使用分配空间的一半。除非我弄错了,当B树的节点半满时,这与B树的最坏情况相同。
假设两个树都在节点中本地存储密钥,但是使用指针来引用记录,唯一的区别是B树必须存储每个分支的指针。这通常会导致高达50%的开销或更少(超过T树),具体取决于密钥的大小。实际上,这接近于AVL树中预期的开销,假设没有父指针,嵌入在节点中的记录,嵌入在记录中的键。这是阻止我们使用B树的预期效率增益吗?
T树通常在AVL树之上实现。 AVL树比B树更平衡。这可以与T树的应用相关联吗?
答案 0 :(得分:3)
我可以给你一个覆盖答案一半的个人故事,也就是说,为什么我在大约18年前编写了一些Pascal代码来编程B+ trees。
我的目标系统是一台带有两个磁盘驱动器的PC,我必须在非易失性存储器上存储一个索引,我想更好地了解我在大学里学到的东西。我对商业软件包的性能非常不满意,可能是DBase III,或者是一些Fox产品,我记不清了。
无论如何:我需要这些操作:
上一项
索引的最大大小未知
B + -trees让那个小小的PC真的飞过了数据!
叶子有两个额外的指针,因此它们形成了一个双向链表,用于顺序搜索。
答案 1 :(得分:2)
实际上,不同之处在于您使用的系统。正如我在大学的导师评论的那样:如果你的问题在于内存不足,或者硬盘短缺将决定你将使用哪个树和实现。最有可能是B +树。
因为有数百个实现,例如2direction队列和一个方向队列,你需要循环思想元素,并且有多种方法来存储索引并检索它将确定任何实现的真正缺点和分钟