数据结构之B树
平衡多路搜索树
23树:n(2) 指针 元素 指针 元素 指针
- B-树:
每个结点存储「M/2-1到M-1个关键字(元素),非叶子结点指针指向关键字范围的子结点;
所有关键字在整颗树中只出现一次,可以是非叶子结点; - B+树:
在B-树基础上,为叶子结点增加链表指针,所有关键字都在叶子结点中出现,非叶子结点作为叶子结点的索引;
B+树关键字在叶子结点中查找; - B*树:
在B+树基础上,为非叶子结点也增加链表指针,将结点的最低利用率从1/2提高到2/3;
B树
1970年,R.Bayer和E.mccreight提出一种平衡的多叉树,称为B树(或B-树、B_树)
把一个结点指针数目最多的值称为B树的阶(M),如234树的阶为4。
- 一棵m阶B树是一棵平衡的m路搜索树。它满足下列性质:
1.任意非叶子结点最多只有M个子结点,且M>1;
2.根结点的孩子数为[2, M];
3.除根结点以外的非叶子结点的子结点数为[M/2, M];
4.每个结点存放至少「M/2-1和至多M-1个关键字;
5.非叶子结点的关键字个数=子结点个数-1;
6.非叶子结点的关键字:K[1], K[2], …, K[M-1]满足K[i] < K[i+1];
7.非叶子结点的指针:P[1], P[2], …, P[M];其中P[1]指向的关键字小于K[1],P[M]指向关键字大于K[M-1],其它P[i]指向关键字介于(K[i-1], K[i]);
8.所有叶子结点位于同一层;
B-树的搜索,从根结点开始,对结点内的关键字(有序)序列进行二分查找。
B+树
B+树是B-树的变体,也是一种多路搜索树。
其定义基本与B-树同,除了:
1.更适合文件索引系统;
2.非叶子结点的子树指针与关键字个数相同;
3.非叶子结点的子树指针P[i],指向关键字的值属于[K[i], K[i+1])的子树(B-树是开区间);
5.为所有叶子结点增加一个链指针;
6.所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的;
7.非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储关键字的数据层;
B*树
是B+树的变体,在B+树的非根和非叶子结点再增加指向兄弟的指针。
- B*树非叶子结点关键字个数至少为(2/3)*M,即块的最低使用率为2/3(B+树为1/2);
- B*树分配新结点的概率比B+树要低,但空间使用率更高。