插入B +树时自顶向下节点分裂的缺点

时间:2013-01-29 00:11:02

标签: b-tree

对于B +树插入,为什么要遍历树然后再向上分裂父母?

Wikipedia建议使用这种插入方式:

  

执行搜索以确定新记录应该去哪个存储桶   成。

     
      
  • 如果存储桶未满(插入后最多b-1个条目),请添加记录。
  •   
  • 否则,拆分桶。   
        
    • 分配新叶子并将桶的一半元素移动到新桶中。
    •   
    • 插入新的叶子   最小的密钥和地址进入父级。
    •   
    • 如果父母已满,请将其拆分。   
          
      • 将中间键添加到父节点。
      •   
    •   
    • 重复,直到找到不需要拆分的父级。
    •   
  •   
     

如果根分裂,则创建一个具有一个密钥和两个密钥的新根   指针。

为什么你会向下遍历树然后再回来执行分裂?为什么不在中途遇到节点时拆分节点?

对我而言,提议的方法执行两次工作,并且还需要更多的簿记。

任何人都可以解释为什么这是首选的插入方法,而不是拆分方式,以及在遍历期间插入的缺点是什么?

1 个答案:

答案 0 :(得分:2)

你必须回溯树,因为你实际上知道是否需要在最低级别进行拆分,直到你到达那里。

在“如果水桶不满,......”这句话中就是全部。

你还应该意识到它的工作量远不及两倍。由于你在记忆中记住各种各样的东西(节点指针,节点内的索引等等),所以在备份的路上没有那么多的计算或搜索。