B树的最大/最小高度

B树的最大/最小高度(基于标准定义)

B树的高度定义为 根节点到叶子节点的路径长度(根节点高度=1,叶子节点在同一层),核心依赖参数:

  • m:B树的 阶 (每个节点最多有 m 个子节点,即最多 m-1 个关键字);
  • n:B树中存储的 总关键字数。

一、最小高度(最平衡情况)

当B树每个节点都填满关键字时(除根节点外,其余节点关键字数达到最大值 m-1),高度最小。

推导逻辑:
  • 根节点最少有 1 个关键字、2 个子节点(m≥2,否则退化为单链表);
  • 第 2 层:2 个节点,每个最多 m-1 个关键字,总关键字数 ≤ 2*(m-1);
  • 第 h 层:2*(m-1)^(h-2) 个节点(叶子节点),总关键字数 ≤ 2*(m-1)^(h-1) - 1(等比数列求和)。
公式:

hmin=⌈log⁡m(n+1)⌉ h_{\text{min}} = \lceil \log_m(n + 1) \rceil hmin=⌈logm(n+1)⌉

  • 示例:m=4(4阶B树,每个节点最多3个关键字),n=10 → hmin=⌈log⁡4(11)⌉=2h_{\text{min}} = \lceil \log_4(11) \rceil = 2hmin=⌈log4(11)⌉=2(第1层根节点3个关键字,第2层3个节点各3个关键字,共12个,可容纳10个)。

二、最大高度(最不平衡情况)

当B树每个非根节点仅含最少关键字时(最少 ⌈m/2⌉ - 1 个关键字,对应 ⌈m/2⌉ 个子节点),高度最大。

关键参数:
  • 最小子节点数 t = ⌈m/2⌉(称为B树的 最小度数 ),即每个非根节点至少有 t 个子节点、t-1 个关键字。
推导逻辑:
  • 根节点:1个关键字,2 个子节点;
  • 第 2 层:至少 2 个节点,每个 t-1 个关键字;
  • 第 h 层:至少 2*t^(h-2) 个叶子节点,总关键字数 ≥ 2*(t-1)*(t^(h-2) - 1)/(t - 1) + (t-1) = 2*t^(h-1) - t(等比数列求和)。
公式:

hmax=⌊log⁡t(n+12)+1⌋ h_{\text{max}} = \lfloor \log_t\left( \frac{n + 1}{2} \right) + 1 \rfloor hmax=⌊logt(2n+1)+1⌋

  • 示例:m=4(t=2,每个非根节点最少1个关键字、2个子节点),n=10 → hmax=⌊log⁡2((10+1)/2)+1⌋=⌊log⁡2(5.5)+1⌋=3h_{\text{max}} = \lfloor \log_2((10+1)/2) + 1 \rfloor = \lfloor \log_2(5.5) + 1 \rfloor = 3hmax=⌊log2((10+1)/2)+1⌋=⌊log2(5.5)+1⌋=3(第1层1个,第2层2个,第3层4个,共7个节点,可容纳10个)。

核心总结

场景 高度公式(t=⌈m/2⌉) 核心条件
最小高度 hmin=⌈log⁡m(n+1)⌉h_{\text{min}} = \lceil \log_m(n + 1) \rceilhmin=⌈logm(n+1)⌉ 所有节点关键字数最大化
最大高度 hmax=⌊log⁡t(n+12)+1⌋h_{\text{max}} = \lfloor \log_t\left( \frac{n+1}{2} \right) + 1 \rfloorhmax=⌊logt(2n+1)+1⌋ 非根节点关键字数最小化
关键备注:
  1. 阶 m 的定义:部分教材将"每个节点最多 m 个关键字"称为 m 阶B树,此时公式需调整(将上述 m 替换为 m+1),核心逻辑一致;
  2. 高度定义:若根节点高度定义为0,公式需减1,本质不影响高度范围;
  3. 实用性:B树的实际高度接近最小高度(因插入/删除操作会维持平衡),确保查询效率为 O(log⁡mn)O(\log_m n)O(logmn)。
相关推荐
by2099912 小时前
哈希表——快速找到数据:冲突、删除与扩容的实现
数据结构·c++·哈希算法·散列表
Code_Solitude12 小时前
c语言:关于qsoet函数知识点
c语言·数据结构·算法
Pniubi13 小时前
快速排序(力扣基础)(递归)
java·数据结构·算法
inrichtt1 天前
第八课时:SPI总线揭秘:四线全双工通信的奥
c语言·数据结构·stm32·单片机·嵌入式硬件
HPtiger1 天前
数据结构——选择排序
数据结构·算法·排序算法
丑梨数据1 天前
信创环境里跑文档工具:格式兼容与本地合规的几个坑
数据结构·人工智能·算法·决策树·排序算法
烂蜻蜓1 天前
Pandas入门教程(四):Series数据结构——创建、索引与常用方法
数据结构·pandas
CS创新实验室1 天前
一棵树怎么做到“自平衡还不太费力“?——红黑树的旋转与染色
数据结构·算法·红黑树·408·计算机考研
Logic1011 天前
C语言/数据结构位运算题解:异或XOR找出被挑选一次的果子编号——只出现一次的数字
c语言·数据结构·算法·数组·位运算·时间复杂度·空间复杂度
从小白到软工1 天前
4-3 项目-学生成绩管理系统(上)
c语言·开发语言·数据结构·经验分享·ai编程