b树的顺序

时间:2011-05-12 20:54:21

标签: data-structures tree b-tree

我正在读考试,然后来到B树上。维基百科将B树描述为树,其中节点具有至少d且最多2d的密钥,因此最多2d + 1叶。例如,如果d = 1,它将有最多2个键和3个子项,使其成为2-3树。然而,除非我弄错了,否则这不允许例如2-3-4树。

然而,我们的材料将b树描述为树,其中每个节点具有至少t> = 2 t-1个密钥和至多2t-1个密钥。这意味着节点具有奇数个键和偶数个子节点。例如,t = 2将具有1到3个键,最多4个子项,使其成为2-3-4树。另一方面,这种符号不可能有2-3棵树。

除此之外,Knuth还有一个符号,其中d表示节点中的最大子节点数。这种表示法允许偶数和奇数的孩子,允许2-3棵树和2-3-4棵树。

我知道2-3棵树和2-3-4棵树都存在。

真正的符号是什么?有真正的符号吗?作为一个额外的问题;什么是大小为h的树中的最大键数?

2 个答案:

答案 0 :(得分:2)

如果您仔细阅读维基文章,您会发现B树有两种主要变体(不包括B *和B +等结构变体),其中一种带有t - > 2t个密钥,以及t - >密钥2t+1个密钥。

将这些变体翻译成#children,我们有t+1 - > 2t+1个孩子,t+1个孩子 - > 2t+2孩子。

所以基本上回答你的问题,2-3和2-3-4树都是有效的树,每个树都根据不同的变体/定义:

2-3是第一类(t+1 - > 2t+1子女,其中t = 1)

2-3-4属于第二类(t+1 - > 2t+2子女,其中t = 1)

两种变体的有效性源于这样一个事实,即拆分和合并(删除和从ADT插入的操作)都是有效的:

t - > 2t

分割。 当我们添加新元素并且节点具有超过最大键数2t时发生 因此,我们有2t+1个密钥,我们将节点拆分为两个节点,并将一个元素推送到父节点,在两个子节点中保留2t个密钥,并在每个子节点中保留t个密钥。这是可以接受的,因为节点中的最小键数确实是t

合并。 当我们删除一个键并且一个节点包含的最小数量小于t时,它会发生,并且它的兄弟也是最小的。因此,我们在新的合并节点中有t-1 + t个密钥,结果节点必须有效:t-1 + t = 2t-1 <= 2t。大。

t - &gt;也是如此2t+1

分割。 2t+2变为tt+1即可。

合并。 t-1 + t = 2t-1 <= 2t+1

当然,运行时间没有区别,它只是一个很小的理论重要性的实施差异(您可以使用第一个变体稍微优化一些算法,但不会太多,它会改变运行时的复杂性)。 / p>

答案 1 :(得分:1)

在Google学者中搜索b tree cmer =&gt;无处不在的B-Tree,Comer,1979

这是您在数据结构文章中找到的被引用最多的论文。本文详细描述了b树(它是如何工作的,复杂性和它的变体......)。你应该找到答案。

我希望这会有所帮助

P.S。如果您使用与教授的公式不同的公式,则在考试中引用该论文:P