4.B树、B+树
(B树需知概念和基本操作建立、插入、删除;B+只需了解概念;)
1.B树的基本操作
B树,多路平衡查找树,
m阶B树,指所有结点至多有m棵子树,即每个结点最多有三个分支(至多还有m-1个结点,例:2个关键字有三个缝隙则有三个分支);
m阶B树特性:
1)每个结点至多有m棵子树,每个结点内至多有m-1个关键字;
2)若子树根结点不是终端结点至少含有两颗子树(即根结点至少有一个关键字 ⭐️)
3)除根节点外的非叶子结点至少有 向上取整m/2 棵子树(即至少有有 m/2向上取整-1个关键字⭐️);
4)非叶子结点结构,数组,n(关键字个数),P_0,K1,P_1,K2,_P2…;例:1,P_0,K1,P2;表示(1个关键字,关键字左右范围左为小,右为大,左指针指向小的子树,右指针指向大的子树;
5)所有叶子结点用内容为空的结点代替,且出现在同一层;那么该平衡查找树的平衡因子为0;
例:高度为5的3阶B树至少结点,和至多结点?
至少概念,根结点至少2棵子树,其他结点 向上取整m/2=2,造成至少结点树为1+2+2*2+…+2^(h-1) =2^h -1
至多结点,每个结点至多m棵子树,1+m+m2+…+m(h-1)=m^h -1;
B树的高度(计算):
结点个数应满足n<=(1+m+m2+…+m(h-1))=m^h-1(最多个数,满全m阶树),
已知m阶B树特性的非叶结点至少有 向上取整m/2棵子树;
B树的至少结点个数为n=(累和等比数列到h-1,等比为向上取整m/2)=(向上取整m/2)^h -1;
一颗3阶的B树中有2047个关键字,则树的最大高度和最小高度?
最大高度 log_([上3/2]-1){2047+1/2)+1;最小高度[上log_3{2047+1}]
B树的查找:
思想:根据关键字大小比较,找到适应查找关键字范围的指针指向的子树,不断重复直到找到,若NULL则失败;
在结点内找关键字可折半查找,因为结点中的关键字为有序排列的;
B树的插入:
原则:插入不能破环B树的特性,若破坏则策略部分重组;
思想:
1)定位 ,利用B树查找,找出关键字插入位置;
2)插入;插入结点后溢出,则将小结点向根传递重组
B树的删除:
1)直接删除,不改变B树特性;
2)删除后结点关键字空,向兄弟结点借关键字;
兄弟结点够借,那么兄弟借之,且满足B树特性大小排列;
兄弟结点不够借,那么减少根节点关键字个数并合并兄弟结点;
B+树:
B+树是应数据库所需数据结构而出现的一种B树的变形树;
一棵m阶B+数应满足以下条件:
1)每个结点最多有m棵子树;
2)非叶结点至少有两颗子树,其他分支结点至少有 向上取整m/2 棵子树,
**3)结点的子树个数与关键字个数相等;**与B树不同
4)叶子结点包括关键字和指向相应记录的指针,叶子结点的关键字按大小顺序连接起来;
5)除叶子结点外,其他非根结点都可看成分支结点,其中关键字都为子结点最大关键字;
B+树的查找:
既可以和B数一样的从根节点的多路查找,
另一种是叶子结点的关键字序列的顺序查找;
B树与B+树的异同:
1)B树中结点若有n个结点则有n+1棵子树(对应n+1个分叉),B+树种结点若有n个关键字则有n棵子树(对应n个分叉)
2)非根内部结点(除叶),结点至少含有的分叉树都为 向上取整m/2,至多含有m个分叉 ,但两则因关键字与分叉对应不同,对应至少含有关键字叶不同,
B+与B树同处,B+树非叶根结点至少2棵子树,B树非终端(非叶)根结点至少有2棵子树;
3)B+树中,叶子结点包含信息,所有非叶子结点仅起索引作用,且结点存储的关键字风别为对应子树的最大关键字;
4)B+树中,叶子结点包含所有关键字,且所有关键字别连接起;而B树种,叶子结点包含的关键字和其他结点包含的关键字时不重复的;
注:B树B+树都可用于文件索引结构,而B+树还应用于数据库中索引;