b树和b+树的区别

一,b树

b树(balance tree)和b+树应用在数据库索引,可以认为是m叉的多路平衡查找树,但是从理论上讲,二叉树查找速度和比较次数都是最小的,为什么不用二叉树呢?

因为我们要考虑磁盘IO的影响,它相对于内存来说是很慢的。数据库索引是存储在磁盘上的,当数据量大时,就不能把整个索引全部加载到内存了,只能逐一加载每一个磁盘页(对应索引树的节点)。所以我们要减少IO次数,对于树来说,IO次数就是树的高度,而“矮胖”就是b树的特征之一,它的每个节点最多包含m个孩子,m称为b树的阶,m的大小取决于磁盘页的大小。

█一个M阶的b树具有如下几个特征:

定义任意非叶子结点最多只有M个儿子,且M>2;

根结点的儿子数为[2, M];

除根结点以外的非叶子结点的儿子数为[M/2, M],向上取整;

非叶子结点的关键字个数=儿子数-1;

所有叶子结点位于同一层;

k个关键字把节点拆成k+1段,分别指向k+1个儿子,同时满足查找树的大小关系。

█有关b树的一些特性,注意与后面的b+树区分:

关键字集合分布在整颗树中;

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

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

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

█如图是一个3阶b树,顺便讲一下查询元素5的过程:


1,第一次磁盘IO,把9所在节点读到内存,把目标数5和9比较,小,找小于9对应的节点;


2,第二次磁盘IO,还是读节点到内存,在内存中把5依次和2、6比较,定位到2、6中间区域对应的节点;

3,第三次磁盘IO就不上图了,跟第二步一样,然后就找到了目标5。

可以看到,b树在查询时的比较次数并不比二叉树少,尤其是节点中的数非常多时,但是内存的比较速度非常快,耗时可以忽略,所以只要树的高度低,IO少,就可以提高查询性能,这是b树的优势之一。

█b树的插入删除元素操作:

比如我们要在下图中插入元素4:


1,首先自顶向下查询找到4应该在的位置,即3、5之间;

2,但是3阶b树的节点最多只能有2个元素,所以把3、4、5里面的中间元素4上移(中间元素上移是插入操作的关键);

3,上一层节点加入4之后也超载了,继续中间元素上移的操作,现在根节点变成了4、9;

4,还要满足查找树的性质,所以对元素进行调整以满足大小关系,始终维持多路平衡也是b树的优势,最后变成这样:


再比如我们要删除元素11:

1,自顶向下查询到11,删掉它;

2,然后不满足b树的条件了,因为元素12所在的节点只有一个孩子了,所以我们要“左旋”,元素12下来,元素13上去:


这时如果再删除15呢?很简单,当元素个数太少以至于不能再旋转时,12直接上去就行了。

二,b+树

b+树,是b树的一种变体,查询性能更好。m阶的b+树的特征:

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

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

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

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

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


█b+树相比于b树的查询优势:

1、b+树的中间节点不保存数据,所以磁盘页能容纳更多节点元素,更“矮胖”;

2、b+树查询必须查找到叶子节点,b树只要匹配到即可不用管元素位置,因此b+树查找更稳定(并不慢);

3、对于范围查找来说,b+树只需遍历叶子节点链表即可,b树却需要重复地中序遍历,如下两图:


原文参考:

---------------------

作者:login_sonata

来源:CSDN

原文:https://blog.csdn.net/login_sonata/article/details/75268075

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 原文链接 B树 1.前言: 动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(...
    非典型程序员阅读 4,919评论 0 3
  • B树 1.前言: 动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balan...
    铁甲依然在_978f阅读 5,316评论 0 4
  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 11,446评论 0 13
  • 参考:B树和B+树的总结B树、B-树、B+树、B*树都是什么 总结 利用平衡树的优势加快查询的稳定性和速度;B+树...
    小小少年Boy阅读 58,773评论 8 77
  • 多少风起云,淡泊似人生; 田间乡村道,遍洒爱欢腾。 夫唱妇来随,情爱共结晶; 孩儿多欢笑,乡野播春情。
    花蔓情缘阅读 3,552评论 0 3

友情链接更多精彩内容