B-Tree(B-树)底层原理

B-Tree(B-树)

基本搜索结构

在这里插入图片描述

以上结构适合用于数据量不是很大的情况,如果数据量非常大,一次性无法加载到内存中,使用上述结构就不是很方便

B-树概念

一种适合外查找的树,它是一种平衡的多叉树,称为B树(B-树")。一棵M阶(M>2)的B树,是一棵平衡的M路平衡搜索树,可以是空树或者满足一下性质:

  1. 根节点至少有两个孩子
  2. 每个非根节点至少有M/2(上取整)个孩子,至多有M个孩子
  3. 每个非根节点至少有M/2-1(上取整)个关键字,至多有M-1个关键字,并且以升序排列
  4. key[i]和key[i+1]之间的孩子节点的值介于key[i]、key[i+1]之间
  5. 所有的叶子节点都在同一层

B-树的插入分析

假设M = 3. 即三叉树,每个节点中存储两个数据,两个数据可以将区间分割成三个部分,因此节点应该有三个孩子,节点的结构如下:

在这里插入图片描述
注意:孩子永远比数据多一个。

用序列{53, 139, 75, 49, 145}构建B树的过程如下:

在这里插入图片描述

在这里插入图片描述

插入75的过程如下:
1.按照插入排序思想将75插入到序列中
2.插入后该节点不满足情况,需要对该节点进行分裂

分裂节点
在这里插入图片描述

1.找到节点数据域的中间位置
2.给一个新节点,将中间位置的数据搬移到新节点中
3.将中间位置数据搬移到父节点中
4.将节点连接好
在这里插入图片描述

在这里插入图片描述
1.找到该元素的插入位置(索要插入节点pCur)
2.按照插入排序思想将节点插入到该节点(pCur)的合适位置3.
检测该节点是否满足B树的性质
满足: 插入结束
不满足:对节点进行分裂

插入过程:

  1. 如果树为空,直接插入新节点中,该节点为树的根节点
  2. 树非空,找待插入元素在树中的插入位置(注意:找到的插入节点位置一定在叶子节点中)
  3. 检测是否找到插入位置(假设树中的key唯一,即该元素已经存在时则不插入)
  4. 按照插入排序的思想将该元素插入到找到的节点中
  5. 检测该节点是否满足B-树的性质:即该节点中的元素个数是否等于M,如果小于则满足
  6. 如果插入后节点不满足B树的性质,需要对该节点进行分裂
    申请新节点
    找到该节点的中间位置
    将该节点中间位置右侧的元素以及其孩子搬移到新节点中
    将中间位置元素以及新节点往该节点的双亲节点中插入,即继续4
  7. 如果向上已经分裂到根节点的位置,插入结束
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值