我正在读考试,然后来到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的树中的最大键数?
答案 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
变为t
和t+1
即可。
合并。
t-1 + t = 2t-1 <= 2t+1
当然,运行时间没有区别,它只是一个很小的理论重要性的实施差异(您可以使用第一个变体稍微优化一些算法,但不会太多,它会改变运行时的复杂性)。 / p>
答案 1 :(得分:1)
在Google学者中搜索b tree cmer =&gt;无处不在的B-Tree,Comer,1979
这是您在数据结构文章中找到的被引用最多的论文。本文详细描述了b树(它是如何工作的,复杂性和它的变体......)。你应该找到答案。
我希望这会有所帮助
P.S。如果您使用与教授的公式不同的公式,则在考试中引用该论文:P