B树中所有节点的孩子节点数的最大值称为B树的阶,通常用m表示,m约束了每个节点子树的最大数量(定义),也约束了子树的最少数量(m/2向上取整)。定义如下
m
棵子树(m-1个关键字)。n,P0,K1,P1,K2,...,Kn,Pn
.其中Ki
为关键字,Pi
为指向子树根节点的指针。且Ki-1<Pi-1(表示所指向子树的所有节点的关键字)<Ki
,B树的每个节点既存储数据又存储所用当m取256时,相比平衡BST的高度,BST在最坏情况下树高(IO次数)降低其1/7
,最好情况下树高降低1/8
。
与BST很类似,只是每个节点都是多个关键字的有序表。B树的查找包含两个基本操操作:1.在B树中找节点(磁盘IO操作);2.在节点内找关键字(在内存中)
B数的插入(定位+插入),因插入是使得节点的关键字数量增加,当个数在[m/2-2,m-1]外(b树定义)时,必须对节点进行分裂,分裂的过程等价于在父节点中插入一个关键码,所以,分裂过程可能一直进行到根节点。B树长高的唯一方式:根节点出发生了上溢操作,此时分裂后,根的子树仅为2.
当直接删除后满足B树定义,则ok,否则,然后看兄弟够借,为了保证有序性,具体是通过三角借债的方式完成,最后才是合并。
https://stackoverflow.com/questions/870218/what-are-the-differences-between-b-trees-and-b-trees
原文:https://www.cnblogs.com/justisme/p/12853594.html