【问题标题】:Can an m-way B-Tree have m odd?m路B树可以有m个奇数吗?
【发布时间】:2017-03-09 21:07:57
【问题描述】:

我在 CLRS 一书中读到,我们有 m 路 B-tree,其中 m 是偶数。但是是否存在 m 为奇数的 B-Tree,如果存在,那么我们如何对本书中给出的代码进行更改。

【问题讨论】:

  • 偶数m会有什么问题?您尝试了哪些更改,您是否遇到了问题? (有人会相信 2-3-trees 2-4-trees吗?)

标签: algorithm b-tree clrs


【解决方案1】:

通过 m 路 B 树,我假设您的意思是 B 树,其中每个内部节点最多允许有 m 个子节点。根据CLRS对B-tree的定义:

节点对它们可以包含的键的数量有下限和上限。我们用一个固定整数 t} ≥ 2 表示这些界限,称为 B 树的最小度数:...一个内部节点可能有最多 2t 个子节点

所以孩子的最大数量总是偶数——根据这个定义,它不可能是奇数。


然而,这并不是 B-tree 的唯一定义。有许多定义略有不同,最终对整体性能几乎没有影响。这可能会导致混乱。有一些 B 树定义允许奇数上限,而那些不允许。 CLRS 的定义没有奇数上限用于内部节点的子节点数。

但是,B 树的另一个正式定义是 Knuth [1998](计算机编程艺术,第 3 卷(第二版),Addison-Wesley,ISBN 0-201-89685-0)。 Knuth 的定义确实允许奇数上限。当 CLRS 枚举所有形式为 (t, 2t) 的最小-最大树边界时 t ≥ 2 时,Knuth 枚举所有形式为 (ceil(k/2), k) 的树边界时 k ≥ 2。

Knuth Order, k |  (min,max)  | CLRS Degree, t
---------------|-------------|---------------
     0         |      -      |        –
     1         |      –      |        –
     2         |      –      |        –
     3         |    (2,3)    |        –
     4         |    (2,4)    |      t = 2
     5         |    (3,5)    |        –
     6         |    (3,6)    |      t = 3
     7         |    (4,7)    |        –
     8         |    (4,8)    |      t = 4
     9         |    (5,9)    |        –
     10        |    (5,10)   |      t = 5

例如,2-3 tree, (2,3) 是 Knuth 阶为 3 的 B 树。但它不是有效的 CLRS 树,因为它的上限是奇数。


更改代码并不容易,因为 B 树有很多代码取决于变量 t。最大的变化之一是内部:B-TREE-SPLIT-CHILD(x,i),您需要找到一种方法将一个孩子与奇数个孩子(一个偶数键)到节点yz。这两个结果节点之一将比另一个多一个密钥。如果您正在寻找代码,我建议您在 Internet 上查找 B-tree 的实现,该实现使用类似于 Knuth 的定义(例如搜索“Knuth Order B-tree”)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 2021-10-15
    • 2021-12-25
    • 2014-03-23
    • 2015-01-31
    • 2022-10-13
    • 1970-01-01
    相关资源
    最近更新 更多