为什么B-tree和B + _tree存储在每个非叶节点中从半满到完全满

时间:2011-12-20 08:30:16

标签: algorithm database b-tree-index

我刚学习DBMS中的B-tree和B + -tree。 我不明白为什么树中的非叶节点在[n / 2]和n个子节点之间,当n为特定树修复时。

为什么?这有什么好处?

谢谢!

2 个答案:

答案 0 :(得分:1)

这是使B +和B树平衡的特性,由于它,我们可以很容易地计算树上ops的复杂性并将其绑定到O(logn)[其中n是元素的数量数据集]。

  • 如果一个节点可以拥有更多的B子,我们可以创建一个深度为2的树:一个根,所有其他节点将从根开始。然后,搜索元素将是O(n),而不是期望的O(logn)。
  • 如果一个节点可能少于B / 2个儿子,我们可以创建一个树,它实际上是一个链表[n个节点,每个节点有1个子节点],高度为n - 并且搜索操作将再次为O(n )而不是O(logn)

小现象:除了根之外,每个非叶节点都有B / 2到B的子节点。只允许根用于少于B / 2的儿子。

答案 1 :(得分:0)

这种结构的基本假设是具有固定的块大小,这就是为什么每个内部块都有n个槽用于索引其子节点的原因。

如果需要将子项添加到已满的块(具有正好n个子项),则将块拆分为两个块,然后替换其父索引中的原始块。两个区块中每个区块中的子项数明显为n div 2(假设n为偶数)。这就是下限的来源。

如果父级已满,则操作会重复,可能会重复到根本身。

拆分操作并允许n/2 - 填充块允许大多数插入/删除仅导致本地更改,而不是重新平衡树的大部分。