B树 - 为什么不能有一个偶数个键的节点?

时间:2010-08-18 21:41:00

标签: algorithm data-structures b-tree

我正在尝试根据“算法简介”中的“B-Trees”章节实现B树。

我不太了解的是“最小程度”。在书中,声明数字,表示节点可以容纳的键数的下限/上限。它进一步说:

  1. 每个非根节点至少存储t - 1个密钥,并且t个孩子
  2. 每个节点最多存储2*t - 1个密钥,并且有2*t个孩子
  3. 所以你得到t = 2:

    1. t - 1 = 1个密钥,t = 2个孩子
    2. 2*t - 1 = 3把钥匙和4个孩子
    3. 对于t = 3

      1. t - 1 = 2个密钥,t = 3个孩子
      2. 2*t - 1 = 5个钥匙和6个孩子
      3. 现在问题出现了:B-Tree中的节点似乎只能在满满时存储奇数个数量的密钥。

        为什么不能有一个节点,让我们说最多4个键和5个孩子?它与拆分节点有关吗?

2 个答案:

答案 0 :(得分:3)

  

似乎B树中的节点只能存储奇数个键?

绝对不是。您编写的数字分别是最小和最大键数,因此对于t = 2,允许使用1,2,3键的节点。对于t = 3,允许使用具有2,3,4,5个键的节点。

此外,树的根只允许有一个密钥。

可以定义(和实现)具有例如的树。节点中的1或2个键(所谓的2-3棵树)。定义B树以容纳一个B-tree的原因是这导致更快的性能。特别是,这允许分摊O(1)(计算拆分和连接操作)删除和插入操作。

答案 1 :(得分:1)

这不是不可能,但不是最理想的。你如何拆分一个奇数个孩子的节点?