如果数据装不下内存,那么就意味着要把数据结构放到磁盘上。此时磁盘的访问代价太高了,我们想要把磁盘访问次数减小到一个非常小的常数。
我们可以以与建立二叉查找树大致相同的方式建立M叉查找树。
阶位M的B树是一棵具有下列特性的树:
1.数据项存储在树叶上。
2.非叶节点存储直到M - 1个关键字以指示搜索的方向;关键字i代表子树i + 1中的最小的关键字。
3.树的根或者是一片树叶,或者其儿子数在2和M之间。
4.除根外,所有非树叶节点的儿子数在[M / 2]和M之间。
5.所有的树叶都在相同的深度上并有[L / 2]和L之间个数据项。
插入情况
如果该树叶还没有被装满则插入项。
如果该树叶装满了则分裂该树叶,当父节点也满了,则沿树向上分裂,直到树根。如果分裂树根,那么我们就得到两个树根,我们可以建立一个新的根,这个根以分裂得到的两个树根作为它的两个儿子。这就是为什么准许树根可以最少有两个儿子的特权。
删除情况
如果被删元所在的树叶的数据项数已经是最小值,那么删除后它的项树就低于最小值了。我们可以通过在邻节点本身没有达到最小值时领养一个邻项来矫正这种状况。如果相邻节点已经达到最小值,那么可以与该相邻节点联合以形成一片满叶。可是,这意味着其父节点失去一个儿子。如果失去儿子的结果又引起父节点的儿子数低于最小值,那么我们使用相同的策略继续进行。这个过程可以一直上行到根。根不可能只有一个儿子。如果这个领养过程的结果使得根只剩下一个儿子,那么删除该根并让它的这个儿子作为树的新根。