T-trees 相对于 B+/-trees 的优势是啥?

Posted

技术标签:

【中文标题】T-trees 相对于 B+/-trees 的优势是啥?【英文标题】:What are the advantages of T-trees over B+/-trees?T-trees 相对于 B+/-trees 的优势是什么? 【发布时间】:2011-06-17 18:30:54 【问题描述】:

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

我无法理解的是为什么 T-trees 甚至用于平面内存?

它们被宣传为 AVL 树的节省空间的替代方案。

在最坏的情况下,T-tree 的所有叶子节点只包含一个元素,所有内部节点都包含允许的最小数量,接近满。这意味着平均只使用了一半的分配空间。除非我弄错了,否则这与 B 树的最坏情况相同,即 B 树的节点是半满的。

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

T-trees 通常在 AVL 树之上实现。 AVL 树比 B 树更平衡。这可以和T-tree的应用联系起来吗?

【问题讨论】:

【参考方案1】:

实际上,区别在于您使用的系统。正如我在大学的导师所评论的那样:如果您的问题在于内存不足,或者硬盘不足,将决定您将使用哪种树以及哪种实现。很可能是 B+ 树。

因为有数百种实现,例如 2direction 队列和 1 个方向队列,您需要循环思想元素,并且还有多种存储索引和检索索引的方法将决定任何实现的真正缺点和分钟.

【讨论】:

【参考方案2】:

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

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

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

查找 插入 删除 下一项

上一条

索引的最大大小未知

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

B+-trees 让那台速度慢的小型 PC 真正飞过数据!

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

【讨论】:

非常感谢您的回复。这是第一个,我很感激。我会留下这个问题,但万一有人知道 T-trees 的特性。我知道它们已经过时了,所以很少有人对它们感兴趣,但它们在***上有自己的页面。我认为他们一定有一些正当的特征。再次感谢。

以上是关于T-trees 相对于 B+/-trees 的优势是啥?的主要内容,如果未能解决你的问题,请参考以下文章

链表相对二叉树的优势?

870. 优势洗牌

Leetcode(870)-优势洗牌

Spark相对于MapReduce的优势

弧线相对于球拍的优势

WebP相对于PNG,JPG有啥优势