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



我刚刚学习了DBMS中的B-tree和B+-tree。我不明白为什么树中的非叶节点有[n/2]到n个子节点,而n对于特定的树是固定的。

为什么?那有什么好处呢?

谢谢!

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

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

小曲率:除根节点外,每个非叶节点都有B/2到B个子节点。

这个结构的基本假设是有一个固定的块大小,这就是为什么每个内部块都有n槽来索引它的子块。

当需要将子块添加到已满的块(正好有n个子块)时,该块被分成两个块,然后替换父块索引中的原始块。两个块中每个子节点的数量显然是n div 2(假设n是偶数)。这就是下限的来源。

如果父目录已满,则重复操作,可能一直到根目录本身。

拆分操作和允许n/2填充块允许大多数插入/删除只引起局部更改,而不是重新平衡树的巨大部分。

最新更新