B +树中的非叶节点

时间:2015-05-16 03:07:28

标签: algorithm data-structures

假设订单为m的B +树。为什么非叶子节点必须至少有ceil(m / 2)个孩子?或者如果不满足此属性会发生什么。

1 个答案:

答案 0 :(得分:2)

如果不强制执行半满规则,则可以(有效地)得到不平衡树,例如

                      [root]
                     /      \_________________________
                    /                                 \
            [branch]                                   [branch]
           /        \                             ____/    |   \___
          /          \                           /         |       \
[1-record leaf] [1-record leaf] [100-record leaf] [100-record leaf] [100-record leaf]

在这棵树中找到第一条或第二条记录的时间要比找到其他300条记录要少得多。

如果你让叶子只有一个记录,而分支只有一个密钥(因此有两个孩子),我相信查找时间的差异可能与log(m)一样糟糕(其中m是顺序)的树)。沿着完整节点的路径查找记录需要Θ(log(N)* log(m))时间(其中N =记录总数,因此log(N)与树的高度成比例),同时查找沿着最小尺寸节点的路径记录只需要Θ(log(N))时间(因为你在每个分支处只进行一次比较而在叶子上没有进行比较)。

通过强制执行半满规则,您可以确保所有查找时间都是Θ(log(N)* log(m))并且在彼此的常数因子内。