【发布时间】:2015-06-21 00:39:21
【问题描述】:
我很难理解 B 树中的“指针”是什么。它们与二叉树的内部节点相同吗?
如果是,为什么使用不同的名称?
如果不是,它们有何不同?
读完这篇文章后我感到困惑(取自 wiki 中的 B+ 树):
B+ 树的主要价值在于在面向块的存储上下文中存储数据以进行有效检索 - 特别是文件系统。这主要是因为与二叉搜索树不同,B+ 树具有非常高的扇出(节点中指向子节点的指针数量,1 通常为 100 或更多),这减少了所需的 I/O 操作数量在树中找到一个元素。
我在其他 SO 帖子中读到 B+ 树是 B 树,其中“指针”不保存数据,只有键。那么,这个指针是什么?如果有人能解释为什么有这么多指向叶节点的“指针”,那就太棒了:)
编辑:
在 cmets 部分的讨论之后,事情开始变得清晰起来。不过,在这个 highly up-voted answer ,对于B树和B+树的区别,发帖人放了一张图,图中粉色的箭头是从内部节点出来的。它说“指向数据记录的指针”..但数据不是位于叶子中,那么为什么要在这里指针?
【问题讨论】:
-
指针不是特定于 B 树的,它们是一个非常通用的编程概念。
-
我知道一般指针,我想知道它在这种情况下是否有别的东西
-
你为什么会认为它是别的东西?
-
指向一个叶子的指针并不多——它有很多指针,每个指针指向一个不同的子。但是,即使有大量指向同一个节点的指针,仍然没有理由认为这些是某种新型指针。不同的指针可以指向同一个东西。
-
具有高延迟的面向块的大容量存储上的数据的树索引存在以最大限度地减少(“随机”)访问的数量。为此,节点需要包含足够的 key 数据用于导航和对进一步数据的引用:pointers。后者可能有两种:指向进一步索引节点/块的指针(例如,arity)和指向完整数据记录的指针。
标签: algorithm data-structures b-tree