查找(B树)

B-树

B-树是一种多叉平衡搜索树,它可以是空树,或者满足以下特性:

  1. 根节点至少有两个孩子
  2. 每个非根节点至少有M/2(上取整)个孩子,至多有M个孩子
  3. 每个非根节点至少有M/2-1(上取整)个关键字,至多有M-1个关键字,并且以升序排列
  4. key[i]和key[i+1]之间的孩子节点的值介于key[i]、key[i+1]之间
  5. 所有的叶子节点都在同一层
  6. 结点中的key必须按序存储。(任何搜索树中都不允许key重复,所以永远不会出现key相等的情况)

B-树的插入
所有B-数的插入,都一定是插入到叶子结点上。
我们就以M = 3 为例,也就是3叉树,表示每个结点最多三个孩子,2个关键码
在这里插入图片描述

在如图所示B-树中插入 4 和 8;
因为4 < 5,所以会先在 5 左边的子树查询,因为 5 左边的子树只有 3 ,所以会将 3 插入到 4 的右边。因为没有破坏规则,插入结束。
同样,因为 5 < 8 < 18,所以会先在 5 的右边18 的左边查找,因为 8 大于 6 和 7,所以将 8 插入到 7 的 右边,因为规则被破坏,所以此子树需要分裂成两个子树,同时将 7 晋升入它的父结点,但这样,它的父结点也破坏规则了,所以,父结点也要分裂,如下:
在这里插入图片描述

由此可见,B- 树是向上生长的,且所有的叶子节点在同一层

B-树的性能分析
我们知道,在key数量一定的情况下,多叉树的高度一定是小于二叉树的,即logM(N) 一定是远远小于 log2(N)的。而在非内存的外设中,IO的效率是非常低的(相对于内存中的读取),树的高度越高,读取硬盘的次数越多。因此B-树的效率是非常高的

B-树的应用场景
当数据保存在硬盘(包含其他低速 IO 设备)时,应该用B-树,同样的,在这种情况下,二叉平衡搜索树(红黑树/AVL树)是不适合的。
B-树最常见的应用就是用来做索引。索引通俗的说就是为了方便用户快速找到所寻之物,比如:书籍目录可以让读者快速找到相关信息,hao123网页导航网站,为了让用户能够快速的找到有价值的分类网站,本质上就是互联网页面中的索引结构

B+树

B+树是B-树的变种,它在B-树的基础上要求,所有的key,全部都要在叶子结点上保存一份,如下图:

显而易见,相比较于B-树,B+树占用的空间变大了(有些 key 需要存储多份)
它的好处是,当我们使用 select * from tb1 order by id ,表示按序遍历所有的key,在这种情况下,B+树只是一个链表的遍历,而B-树需要做树的遍历。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值