【问题标题】:The order of b-treesb树的顺序
【发布时间】:2011-08-24 11:15:52
【问题描述】:

我正在准备考试,结果出现在 B-trees 上。 Wikipedia 将 B-tree 描述为一棵树,其中节点具有至少 d 和最多 2d 个键,因此最多具有 2d+1 个叶子。例如,如果 d=1,它将有最多 2 个键和 3 个子节点,使其成为 2-3 树。但是,除非我弄错了,否则这不会允许例如 2-3-4 树。

然而,我们的材料将 b-tree 描述为每个节点至少有 t>=2 t-1 个键和最多 2t-1 个键的树。这意味着节点具有奇数个键和偶数个子节点。例如 t=2 将有 1 到 3 个键,以及最多 4 个孩子,使其成为 2-3-4 树。另一方面,这种符号不可能是 2-3 树。

除此之外,还有一个 Knuth 的符号,其中 d 表示节点中的最大子节点数。这种表示法将允许偶数和奇数个子节点,同时允许 2-3 棵树和 2-3-4 棵树。

我知道 2-3 树和 2-3-4 树都存在。

什么是真正的符号?有真正的符号吗?作为一个额外的问题;大小为 h 的树中的最大键数是多少?

【问题讨论】:

    标签: data-structures tree b-tree


    【解决方案1】:

    在 google 学者中搜索 b tree comer => 无处不在的 B-Tree,Comer,1979

    这是在数据结构论文中被引用次数最多的论文。本文详细描述了 b 树(它是如何工作的、复杂性和它的变体......)。在那里你应该找到你的答案。

    希望对你有帮助

    附言如果您使用与所教公式不同的公式,请在考试中引用该论文:P

    【讨论】:

      【解决方案2】:

      如果您仔细阅读 wiki 文章,您会发现 B 树有两种主要变体(不包括 B* 和 B+ 等结构变体),一种具有 t -> 2t 键,一个带有t -> 2t+1 键。

      将这些变体翻译成#children,我们有一个带有t+1 -> 2t+1 children,一个带有t+1 -> 2t+2 children。

      所以基本上回答你的问题,2-3 和 2-3-4 树都是有效的树,每个树都有不同的变体/定义:

      2-3 属于第一类(t+1 -> 2t+1 children where t=1)

      2-3-4 属于第二种(t+1 -> 2t+2 children where t=1)

      这两种变体的有效性源于拆分和合并(从/到 ADT 中删除和插入的操作)都是有效的:

      t -> 2t:

      拆分。 当我们添加一个新元素并且一个节点的键数超过最大数量时发生2t 所以我们有2t+1 键,我们将节点拆分为两个节点,并将一个元素推送到父节点,将2t 键留在两个子节点中,t 键在每个子节点中。这是可以接受的,因为节点中的最小键数确实是t

      合并。 当我们删除一个键并且一个节点包含小于最小数量t,并且它的兄弟节点也处于最小值时会发生这种情况。所以我们的新合并节点中有t-1 + t 键,结果节点必须有效:t-1 + t = 2t-1 <= 2t。太好了。

      t 也是如此 -> 2t+1:

      拆分。 2t+2 变成 tt+1 没关系。

      合并。 t-1 + t = 2t-1 <= 2t+1

      当然在运行时间上没有区别,这只是在理论上没有多大意义的轻微实现差异(您可以使用第一个变体稍微优化一些算法,但不会改变运行时间的复杂性)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-18
        • 1970-01-01
        • 2015-04-25
        • 2011-03-24
        • 1970-01-01
        • 1970-01-01
        • 2014-09-20
        相关资源
        最近更新 更多