【问题标题】:What are Pointers in a B tree?B树中的指针是什么?
【发布时间】: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


【解决方案1】:

我认为您会感到困惑,因为您已经在 B+ 树中读到过,内部节点中的所有指针都指向树中的其他块/节点。如果需要,您可以将它们称为树指针叶节点中的指针指向数据记录或块,(指向下一个叶节点的指针除外)。如果需要,您可以调用这些数据指针

所以你可以说指针指向两个不同的东西;节点或数据,但这只是组织思想的一种方式。指针仍然只是普通的指针,指向某种数据。

来源: 数据库系统基础(第 6 版)第 6 版 作者:Ramez Elmasri(作者)、Shamkant B. Navathe(作者)

【讨论】:

    【解决方案2】:

    wiki 条目讨论了二叉树和 btree 之间的区别。在二叉树中,每个父节点都有 2 个子节点:一个比另一个大,一个比另一个小。在 btree 中,每个父节点可以有许多子节点(这是 wikipedia 文章中的高扇出),并且从该父节点到每个子节点的连接是通过指针实现的。

    这是 btree 的一部分。如您所见,节点 "944; 1011; 1037; 1087" 有 5 个子节点,因此有 5 个指向 不同 节点的指针。这就是维基百科的引述。如果那是一棵二叉树,每一层将只有 1 个键和 2 个子级。

    【讨论】:

    • @XapaJlaMnu:这有什么用?
    • @Phpdna 它回答了这个问题?!你为什么要为此投票给我?您以只有熟悉 btree 的人才能理解的方式回答问题。我认为 OP 无法掌握所谈论的指针。我也没有对你的帖子投反对票...
    猜你喜欢
    • 1970-01-01
    • 2011-08-31
    • 2018-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 2011-05-19
    相关资源
    最近更新 更多