2010-08-18 64 views
9

我试图根据“算法简介”中的“B-Trees”一章来实现B树。B-Tree - 为什么不能有一个偶数个键的节点?

我不明白的是“最低程度”。在书中指出,是一个数字,它表示节点可以容纳的密钥数量的下限/上限。它进一步说:至少

  1. 每个非根节点店在t - 1键和具有t孩子
  2. 每个节点最多存储2*t - 1密钥并且有2*t子女

所以,你得到的T = 2:

  1. t - 1 = 1个键和t = 2名儿童
  2. 2*t - 1 = 3个键和4个孩子

当t = 3

  1. t - 1 = 2个键和t = 3个ch ildren
  2. 2*t - 1 = 5键和6个孩子

现在,这里的问题:它似乎在B树的节点只能存储一个数字键的时候都充分。

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

+0

'in“算法简介”' - 瞧! _Which_“算法简介”:作者?出版商?语言? ISBN?超链接? – greybeard 2017-01-19 09:00:36

回答

3

看来B树中的节点只能存储奇数个键?

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

而且,树的根允许只有1个键。

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

+0

当然你是对的......我的意思是当节点已满时 - 它只能包含奇数个节点。但我不明白为什么这会导致更好的表现,请参阅ire_and-curses评论。 – helpermethod 2010-08-19 05:47:31

+0

@Helper方法:好的,我想第二段回答你的问题 - 你需要一个正式的证明吗? – jpalecek 2010-08-19 08:55:49

+0

@jpalecek我编辑了原始问题,但OP询问实际上关于何时节点已满:为什么完整节点不能有偶数个密钥?这是OP,IMO的实际不太明确的问题。 – nbro 2015-09-07 15:56:26

1

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

+4

我不明白这个说法。您取中间孩子,将其移入父母,然后将中位数右侧的所有孩子分配给父母的新子节点。 – 2010-08-18 22:04:40

+0

@ire_and_curses我认为你在关键字和子节点之间感到困惑...... – nbro 2015-09-07 15:59:02

相关问题