B树与B+树


二叉排序树简单的实现在多数情况能够达到预期的查找效率,但是每个节点只能存储一个元素和只能有两个孩子,使得在大量数据下会造成二叉排序树的深度特别大,那么在进行查找时多次的访问会造成查找效率的下降,同时,在对二叉查找树进行插入时,可能会破坏二叉查找树的平衡。为了降低对于树的访问次数,实现树的平衡,我们需要新的数据结构来处理这样的问题。
 

1.B树的特点

B树中允许一个节点包含多个Key,可以是3个、4个、5个甚至是更多,并不确定,需要看具体实现。现在我们选择一个参数M来构建一个B树,我们可以将其称为M阶的B树。那么这棵树会有以下特点:

  • 每个节点最多有M-1个Key,并且以升序排列
  • 每个节点最多能有M个子节点
  • 跟节点至少有两个子节点

在实际应用中B树的阶数一般比较大(通常大于100),所以,即使存储大量的数据,B树的高度仍然比较小,这样在某些引用场景下,就能体现出他的优势

2.B树存储数据

若参数M选择为5(5阶B树),那么没个节点最多包含4个键值对

1)在空树中插入39
在这里插入图片描述
2)继续插入22,97,和41
在这里插入图片描述

3) 继续插入53

(53的会插入在41和97的中间,那么这个节点将不满足每个节点最多有M-1个Key,所以只能让41(中间键)升序)

4) 继续插入13和21

 

 5)继续插入40

(40的会插入在39的后边,那么这个节点将不满足每个节点最多有M-1个Key,所以只能让22(中间键)升序)

6)继续插入30,27,33,36,35,34,24,29
在这里插入图片描述 7)继续插入26 (27需要向上浮)

 

 


在内存中使用红黑树

在磁盘中用B树,因为磁盘对I/O次数很在乎

每次I/O要3-5ms

但是B树的阶数有限,如果阶数过大使同一节点存储的数据超过了4kb,就会生出新的连接节点浪费效率


一、B+树的结构特点
1.非叶子节点仅具有索引作用,也就是说,非叶子节点只能存储Key,不能存储value
2.树的所有叶节点构成一个有序链表,可以按照key排序的次序依次遍历全部数据。

二、B+树存储数据
若参数M选择为5,那么每个节点最多包含4个键值对,我们以5阶B+树为例,看看B+树的数据存储
(a) 在空树当中插入5

在这里插入图片描述

(b)继续插入8,10,15

在这里插入图片描述 

(c)继续插入16

在这里插入图片描述 

(d)继续插入17

在这里插入图片描述

 

(e)继续插入18

在这里插入图片描述

(f)继续插入6,9,1920,21,22 

 

 (e)继续插入7

 三、B+树和B树的对比
B+ 树的优点在于:
1.由于B+树在非叶子结点上不包含真正的数据,只当做索引使用,因此在内存相同的情况下,能够存放更多的key。
2.B+树的叶子结点都是相连的,因此对整棵树的遍历只需要一次线性遍历叶子结点即可。而且由于数据顺序排列并且相连,所以便于区间查找和搜索。而B树则需要进行每一层的递归遍历。
B树的优点在于:
由于B树的每一个节点都包含key和value,因此我们根据key查找value时,只需要找到key所在的位置,就能找到value,但B+树只有叶子结点存储数据,索引每一次查找,都必须一次一次,一直找到树的最大深度处,也就是叶子结点的深度,才能找到value
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值