m-way B-tree可以有奇数吗?

时间:2017-03-09 21:07:57

标签: algorithm b-tree clrs

我在书 CLRS 上读到我们有m-way B-tree,其中m是偶数。但是有没有B-Tree,其中m是奇数,如果有,那么我们如何才能对本书中给出的代码进行更改。

1 个答案:

答案 0 :(得分:0)

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

  

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

所以孩子的最大数量总是甚至 - 按照这个定义,它不可能是奇怪的。

但是,这不是B树的唯一定义。有许多定义略有不同,最终对整体性能几乎没有影响。这可能会引起混淆。有一些B树定义允许奇数上限和不允许奇数上限。 CLRS的定义对于内部节点的子计数没有奇数上限

然而,B树的另一个正式定义是Knuth [1998](计算机编程艺术,第3卷(第二版),Addison-Wesley,ISBN 0-201-89685-0 )。 Knuth的定义 允许奇数上限。当CLRS枚举t≥2时形式(t,2t)的所有最小 - 最大树界限时,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。这两个结果节点中的一个将具有比另一个更多的键。如果您正在寻找代码,我建议您在互联网上查找使用类似于Knuth的定义的B树的实现(例如,搜索" Knuth Order B -tree"。)