【问题标题】:which is the exactly definition of 2-3 tree这是2-3树的确切定义
【发布时间】:2016-02-21 03:24:31
【问题描述】:

抱歉,我不能发图片,所以我用键盘打印出来。

                             [6:-]

               [2:4]                        [8:-]      

     [0:1]     [2:3]    [4:5]         [6:7]       [8:9]

这个来自《数据结构与算法》,是2-3棵树的图片,你可以看到父节点上的每一个数据都必须在他们的子节点上。

                             [50:90]

      [20:-]                 [70:-]                  [120:150]

[10:-]    [30:40]       [60:-]    [80:-]    [100:110]   [130:140]   [160:-]  

这个来自另一本书《数据抽象和用c++解决问题》,父节点上的数据不在子节点上。

哪个是对的?

【问题讨论】:

  • 它们可能都有效。顶部允许重复(只需将它们放在右子树中)。底部没有任何重复项,但没有显示如何处理重复项。您可以编写一个 2-3 树来拒绝重复值,在这种情况下,顶层树将是无效的。这取决于您决定如何处理重复数据。否则它们都是有效的。顺便说一句,关于算法的权威书籍是 CLRS 书籍,但我认为他们跳过了 2-3 棵树,称它们为 B 树的特例,所以帮助不大。
  • 感谢您的帮助,我知道 CLRS,但现在对我来说太难了。现在在看《数据结构与算法》,把书上的每一个样例和习题都写了一遍,但是有的也很难,我花了很多时间,是不是学习的好方法?
  • 是的,对树、图、堆、队列等基本数据结构和排序算法进行编码是一种很好的学习方式。 2-3 树对编码具有挑战性。祝你好运!

标签: data-structures tree b-tree


【解决方案1】:

这些都是 2-3 树,因为“2-3”只是指每个节点的子节点数。但是这些树有不同的更具体的名称。

第一个,父母从孩子那里复制密钥,称为“B+树”:https://en.wikipedia.org/wiki/B%2B_tree

第二个,其中父键不是副本,称为“B树”:https://en.wikipedia.org/wiki/B-tree

请注意,通常有与键关联的值,而在 B+ 树中,内部节点不包含值。

B+ 树在文件系统支持的数据库索引中很流行。由于内部节点不包含值,因此它们可以具有更高的扇出,从而降低树的高度并加快访问速度。

通常叶节点实际上也不存储值——它们存储指向值存储位置的指针,这很方便地为 B+ 树的叶节点提供了与内部节点完全相同的结构。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 2012-01-22
    • 2016-11-12
    相关资源
    最近更新 更多