我正在尝试根据“算法简介”中的“B-Trees”章节实现B树。
我不太了解的是“最小程度”。在书中,声明度是数字,表示节点可以容纳的键数的下限/上限。它进一步说:
t - 1
个密钥,并且t
个孩子。2*t - 1
个密钥,并且有2*t
个孩子。所以你得到t = 2:
t - 1
= 1个密钥,t = 2个孩子2*t - 1
= 3把钥匙和4个孩子对于t = 3
t - 1
= 2个密钥,t = 3个孩子2*t - 1
= 5个钥匙和6个孩子现在问题出现了:B-Tree中的节点似乎只能在满满时存储奇数个数量的密钥。
为什么不能有一个节点,让我们说最多4个键和5个孩子?它与拆分节点有关吗?
答案 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)
这不是不可能,但不是最理想的。你如何拆分一个奇数个孩子的节点?