您的位置:首页 > 其它

B树、B+树、B*树的理解

2016-05-25 15:50 295 查看
B树:

B树是一种多路平衡查找树,在文件系统中很有用。下面就介绍一下这种树:

一棵m阶的B树,或为空,或为满足下列特性的m叉树:

1、树中每个节点至多有m棵子树;

2、若根节点不是叶节点,则至少应有两棵子树;

3、除根之外的所有非终端节点至少有ceil(m/2)棵子树;

4、所有的非终端节点中包含下列信息数据

(n,P0,K1,P1,K2,P2,......,Kn,Pn)

(1)其中Ki为关键字,按关键字的升序排列

(2)Pi为指向子树根的接点,且指针P(i-1)指向子树种所有结点的关键字均小于Ki,但都大于K(i-1)
(3)除根结点之外的结点的关键字的个数n必须满足: [ceil(m / 2)-1]<= n <= m-1(叶子结点也必须满足此条关于关键字数的性质,根结点除外)

5、所有叶子结点都出现在同一层,叶子结点不包含任何关键字信息(可以看做是外部接点或查询失败的接点,实际上这些结点不存在,指向这些结点的指针都为null)

为什么说B树可以应用于文件系统中,就是因为在查找信息过程中,每次都会访问磁盘,访问磁盘的时间对于内存读写来说数量级是很大的,所以尽可能的减少磁盘访问是很关键的,B树对于大量的文件存储提供了一种解决办法,树的高度决定了磁盘访问的次数,所以尽可能的减少树的高度就相当于减少了磁盘IO。

B树的高度

对于一棵包含n个关键字、高度为h、m阶的B树,应该满足如下公式:


其中t=ceil(m/2);

这样可以看出树的高度是很小的,因为在B树中,树的阶数很大,几百几千,所以最后的结果就比较小。

树的查找,插入和删除操作在此不做赘述,原则就是无论做出什么操作只要满足上述性质即可。

B+树:

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

1、有n棵子树的节点含有n个关键字

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

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

B+-tree的磁盘读写代价更低

B+树的内部结点并没有指向关键字具体信息的指针。因此其内部结点相对B 树更小。如果把所有同一内部结点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多。一次性读入内存中的需要查找的关键字也就越多。相对来说IO读写次数也就降低了。

举个例子,假设磁盘中的一个盘块容纳16bytes,而一个关键字2bytes,一个关键字具体信息指针2bytes。一棵9阶B-tree(一个结点最多8个关键字)的内部结点需要2个盘快。而B+ 树内部结点只需要1个盘快。当需要把内部结点读入内存中的时候,B
树就比B+ 树多一次盘块查找时间(在磁盘中就是盘片旋转的时间)。

B*树:

B*树是B+树的变体,在B+树的基础上(所有的叶子结点中包含了全部关键字的信息,及指向含有这些关键字记录的指针),B*树中非根和非叶子结点再增加指向兄弟的指针;B*树定义了非叶子结点关键字个数至少为(2/3)*m,即块的最低使用率为2/3(代替B+树的1/2)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: