B树学习小结

B树的基本知识

1、B树的定义

对于m阶-B树,其指的是某个结点最多包含m-1个关键码,每个结点的子分支最多有m个。对于除了各节点以外的所有结点,每个结点所具有的内部关键码个数的取值范围为 [ ⌈ m / 2 ⌉ − 1 , m − 1 ] [\lceil m/2\rceil-1,m-1] [m/21,m1]。具有N个关键码的m阶B树的高度H的取值范围为 [ l o g m ( N + 1 ) , l o g ⌈ m / 2 ⌉ ⌊ ( N + 1 ) / 2 ⌋ + 1 ] [log_m(N+1),log_{\lceil m/2\rceil}\lfloor(N+1)/2\rfloor+1] [logm(N+1),logm/2(N+1)/2+1]

2、B树的应用

B树特别适用于内存较小的大规模数据集范问问题,整个B树均存储在外存中,对数据访问的主要耗时都花在了访问外存上,而B树中每一个结点内部的关键码在外存中是连续存储的,因此可以一次装入的内存当中,而查找某一个数据时,访问外存的次数就等于需要把外存中的结点装载到内存中的次数,因此对于m阶B树而言其查找的时间复杂度为 Ω ( l o g m N ) Ω(log_m^N) Ω(logmN),而对于二叉树而言其查找的时间复杂度为 Ω ( l o g 2 N ) Ω(log_2^N) Ω(log2N),m阶B树使得查找的复杂度降低为原来的 1 / l o g 2 m {1}/{log_2^m} 1/log2m。m通常取值为256~1024,因此大致使得查找的复杂度降低了一个数量级级别。

3、B树的相关操作

不同的操作还要根据操作完之后的情况对B树进行调整,因此为了思路上的连贯性这里采用流程图进行表示(ps:第一次用Markdown画流程图orz)

3.1 B树的插入操作

插入关键码 X X X

存在
不存在
上溢
无上溢传递
上溢传递
到达根结点
无上溢
查找X在B树中是否存在
插入失败
结束
找到最终的叶节点,将该结点插入到对应的叶节点中
对于上溢的结点从中间进行分裂
,将分裂的轴点加入到父节点中
继续调整叶子结点
分裂当前结点取轴点作为根结点
3.2 B树的删除操作

删除关键码 X X X

不 存在
存在
下溢
无下溢传递
下溢传递
查找X在B树中是否存在
插入失败
结束
找到对应的叶节点,将该关键码与其直接后继v进行位置交换然后删除关键码v
对于下溢的结点分析其父节点的另一个子树,根据另一个子树的情况决定采用哪种解决方法
采用抽取该结点的父节点的另一个孩子结点中关键码的方法
采用合并的方法
继续调整父节点指导达到根结点

你可能感兴趣的:(数据结构)