• 麋鹿在泛舟
    2022-03-06
    不能少于m/2实际上是和约束"不能多余m"对称的,当一个叶子节点索引个数为m个,触发了m阶B+树的分裂操作,而分裂后的两个叶子节点元素的个数应该是m/2个: * 如叶子节点最少数量比m/2还大,那么就返回分裂和合并了。 * 如叶子节点最少的数量比m/2小很多,那么会大幅度降低合并的效率,导致很多少元素叶子节点。

    作者回复: 写得很好哦~

    
    3
  • 那时刻
    2022-02-22
    我觉得m/2类似于二分查找里的采用二分而不是三分,更快的达到均衡。 另外一个观点是从信息论角度来看,二分的墒最大。
    
    
  • Paul Shan
    2022-02-22
    ​​个人觉得这里每个节点包含的键值至少m/2,m/3,2*m/3对于查询的量级没有影响,都是lg n,m/2实现最简单,所以被选择。m/3的实现除了实现复杂还会增加层数,也就是io访问次数,最先被排除。2*m/3能够让某些情况下层数比m/2会少一些,但是意义不大,因为选择m本身已经降低了层数,选择合适的m,层数的问题已经解决,没有必要再在因子增加新的选择,2*m/3选择会让树的调整次数增加,实现复杂度增加。请问老师实际情况是不是这样?
    
    