B-树的查找
搞懂B-树查找全流程:路径选择、命中判断与各种边界情形
按 空格/→ 演示下一步
全部页面点击任意一页,跳回舞台从这页播放
B-树的查找
搞懂B-树查找全流程:路径选择、命中判断与各种边界情形
B-树的关键特征
上次查找我们沿着指针一路跳,每跳一步都要在节点内做一次有序比较。现在反过来看:节点里关键字数量有规定吗?B-树的硬约束——根的特判、关键字上下界、节点内部结构——就写在这一层。
n 个检字把字典划成 n+1 段,节点内关键字也按序切分子树
m阶B-树的定义
上页说到 B-树「多路平衡、有序分裂」。但一个节点到底最多能分几路、装几个关键字?这就要先约定一个数——阶数 m。这一页把 m 给节点的硬约束讲清楚。
管理者最多管 m 个下属对应节点最多 m 子节点;非 CEO 至少管 ⌈m/2⌉ 人对应非根下限
查找算法的过程
把节点内二分与节点间下降两种搜索叠加起来,就是B-树的完整查找过程。
查找操作实例
绿色节点依次亮起,展示指针从根下移、每层二分、直到命中或在叶子层失败的完整过程。
查找算法的实现
B-树查找核心代码:节点内顺序扫描定位 + 子树递归下降
i 从 0 顺序扫描定位;命中返回当前节点,未命中若为叶子则失败,否则沿 children[i] 递归下降——B-树自顶向下查找的标准范式。
主成本:I/O次数
B-树是为磁盘而生的数据结构。磁盘读写以"块"为单位,而 B-树的每个节点恰好对齐一个磁盘块。所以查找时从根到叶,每经过一个节点就是一次磁盘 I/O——路径长度就是 I/O 次数。
字典按目录→部首→页码逐层缩窄,每次翻页对应一次 I/O
次成本:节点内查找
上页我们算了主成本:树高 h 次磁盘 I/O。但节点读进内存后,里面有 m-1 个键,还得再找——这就是次成本:从磁盘读到的这块数据里「翻到」目标键。
字典按字母排好,先翻到大概页码再确认,对应有序键的二分定位
最小高度
上一页讲 I/O 次数等于树高,那最理想的情况——只查一次就能找到——树得多矮?答案是所有节点都饱和的时候。
部门满员意味着管理跨度最大,公司层级自然最少
最大高度
上一页我们看了 B-树最小高度——每个节点都尽量多装关键字。这次反过来,如果每个节点都只装到最低下限,存同样多的关键字,树会被"拉"到多高?
经理带最少下属对应节点取最小孩子数,员工总数对应关键字总数
高度公式对比
最小与最大高度公式的对照总结
B-树查找总结
- ✓查找路径等于树高,每层触发一次磁盘读
- ✓主成本是磁盘I/O,节点内开销可忽略
- ✓阶数m越大树越矮,但单节点会变胖变慢
- ✓最坏高度即查询最坏磁盘访问次数
课后思考
先自己琢磨,再对照参考答案看思路差在哪。
参考答案节点内关键字数常远小于百个,顺序遍历已够;二分节省被额外比较和分支预测失效抵消。节点大小由磁盘页对齐决定。
参考答案主成本 I/O 消失,只剩 CPU 比较;B-树常数因子在内存下不再划算,红黑树等结构反而占优。
参考答案B+树查找必到叶子才终止;范围查询可直接在叶子链表顺序扫描,省去回溯上层的过程。