B树和B+树区别对比

B树

B树相比二叉树就是每个节点多了更多的子树,节点中存储了一些子树的信息,B树一般用来作为磁盘存取的数据结构,磁盘中有两个机械运动的部分,分别是盘片旋转和磁臂旋转。盘片旋转就是我们说的多少转每分钟。,而磁臂移动则是在盘片旋转到指定位置以后,移动磁臂后开始进行数据读写。那么这就存在一个定位到磁盘中的块的过程,而定位是磁盘的存取中花费时间比较大的一块,毕竟机械运动花费的时候要远远大于电子运动的时间。当大规模数据存储到磁盘的时候,显然定位是一个非常花费时间的过程,而定位是磁盘的存取中花费时间比较大的一块,毕竟机械运动花费的时候要远远大于电子运动的时间。当大规模数据存储到磁盘中的时候,显然定位是一个非常花费时间的过程,但是我们可以通过B树进行优化,提过磁盘读取时定位的效率。

我们可以根据B类树的特点,构造一个多阶的B类树,然后再尽量多的在节点上存储相关的信息,保证层数尽量的少,以便我们可以更快的找到信息,磁盘的I/O操作也少一些,而且B类树是平衡树,每个节点到叶子结点的高度都是相同,这也保证率每个查询时稳定的。可见,B树的功能就是优化二叉树的高度,以便减小磁盘的IO的次数,提高访问效率

B树满足的条件:

1.每个节点最多有m个子树(儿子),且M>2

2.当有子树的时,根节点至少拥有两个子树,(根结点的儿子数为[2, M])

3.除了根节点,每个分直接点至少拥有m/2棵树

4.所有叶节点都在同一层上

5.每个有K个子树的节点会存储k-1个关键码,关键码感召递增次序进行排序

6.关键字的数量满足ceil(m/2)-1<=n<=m-1

B树的特征:

1.关键字集合分布在整棵树中;

2.任何一个关键字出现且只出现在一个结点中;

3.搜索有可能在非叶子结点结束;

4.其搜索性能等价于在关键字全集内做一个二分查找

B+树

B+树的特征:

1.有n棵子树的非叶子结点中含有n个关键字(b树是n-1个),这些关键字不保存数据,只用来索引,所有数据都保存在叶子结点(B树是每个关键字都保存数据)

2.所有的叶子结点中包含了全部关键字的信息,及指向含这些关键字记录的指针,且叶子节点本书依关键字的大小自小而大顺序链接

3.所有的非叶子结点可以看成是索引部分,结点中仅含其子树中的最大(或最小)关键字

4.通常在B+树上有两个头指针,一个指向根节点,一个指向关键字最小的叶子结点

5.同一个数字会在不同节点中重复出现,根节点的最大元素就是B+树的最大元素

B+树在B树的基础上做了优化,它与B树的差异在于:

(1)有K个子节点的节点必然有k个key

(2)非叶子结点仅具有索引作用,跟记录有关的信息均放在叶子节点中

(3)树的所有叶子节点构成一个有序链表,可以按照Key排序的次序遍历全部记录

5é¶B+æ ä¾å¾

 即,B和B+树的区别在于,B+树的非叶子结点只包含导航信息,不包含实际的值,所有的叶子结点和相连的节点使用链表相连,便于区间查找和遍历。

 

 

B+树的优点在于:
1.由于B+树在内部节点上不包含数据信息,因此在内存页中能够存放更多的key。 
  数据存放的更加紧密,具有更好的空间局部性。
  因此访问叶子节点上关联的数据也具有更好的缓存命中率。
2.B+树的叶子结点都是相链的,因此对整棵树的便利只需要一次线性遍历叶子结点即可。
  而且由于数据顺序排列并且相连,所以便于区间查找和搜索。
  而B树则需要进行每一层的递归遍历,相邻的元素可能在内存中不相邻,所以缓存命中性没有B+树好。
  
但是B树也有优点,其优点在于:
  由于B树的每一个节点都包含key和value,因此经常访问的元素可能离根节点更近,因此访问也更迅速。
 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值