B-树和B+树

来源:互联网 发布:单片机应用系统实例 编辑:程序博客网 时间:2024/06/08 05:14

对于树,我介绍以下两种,B-树和B+树。

B-树

B-树是一种平衡的多路查找树,它在文件系统中很有用。

B-树的特性

一颗m阶的B-树,或为空树,或为满足下列特性的m叉树;

1)树中每个结点至多有m颗子树;

2)若根结点不是叶子结点,则至少有两颗子树;

3)除根之外的所有非终端结点至少有m/2┐棵子树;

4)所有的非终端结点中包含下列信息数据(n,A0,K1,A1,K2,A2,...,Kn,An)

其中:Ki(i=1,...,n)为关键字,且Ki<Ki+1(i=1,...,n-1);Ai(i=0,...,n)为指向子树根结点的指针,且指针Ai-₁所指子树中所有结点的关键字均小于Ki(i=1,...,n),An所指子树中所有结点的关键字均大于Kn,n(m/2┐-1<=n<=m-1)为关键字的个数(或n+1为子树个数)。

5)所有的叶子结点都出现在同一层次上,并且不带信息(可以看作是外部结点或查找失败的结点,实际上这些结点不存在,指向这些结点的指针为空)。

B-树的查找

由B-树的定义可知,在B-树上进行查找的过程和二叉排序树的查找类似。


查找成功的例子

在上图B-树上查找关键字47的过程:首先从根开始,根据根结点指针t找到*a结点,因*a结点中只有一个关键字,且给定值47>关键字35,则若存在必在指针A1所指的子树内,顺指针找到*c结点,该结点有两个关键字(43和78),而43<47<78,则若存在必在指针A1所指的子树中。同样,顺指针找到*g结点,在该结点中顺序查找找到关键字47,由此,查找成功。

查找不成功的例子

在上图B-树上查找关键字23的过程:从根开始,因为23<35,则顺该结点中指针A0找到*b结点,又因为*b结点中只有一个关键字18,且23>18,所以顺结点中第二个指针A1找到*e结点。同理因为23<27,则顺指针往下找,此时因指针所指为叶子结点,说明此棵B-树中不存在关键字23,查找因失败而终结。

B+树

B+树的特性

B+树是应文件系统所需而出的一种B-树的变型树。一棵m阶的B+树和m阶的B-树的差异在于:

1)有n棵子树的结点中含有n个关键字。

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

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


B+树的查找

上图为一颗3阶的B+树,通常在B+树,通常在B+树上有两个头指针,一个指向根结点,另一个指向关键字最小的叶子结点。因此,可以对B+树进行两张查找运算:一种是从最小关键字起顺序查找,另一个种是从根结点开始,进行随机查找。

小结

程序=算法+结构。只要将其两者懂了,通了。任何工程都只不过是一些形式上的变化。基础很重要,牢牢地打好地基更重要!

  


0 0
原创粉丝点击