14.2.1 时间复杂度与空间复杂度-01
本节重点是从代码结构中识别时间复杂度。考试不会让你精确数每一条机器指令,而是让你判断基本操作的增长规模。
基本操作
分析复杂度时,先找最能代表算法成本的基本操作,例如比较、赋值、循环体执行、数组访问等。基本操作执行次数随
常见代码结构
| 代码形态 | 复杂度 | 判断依据 |
|---|---|---|
| 顺序执行固定条语句 | 与 | |
单层循环 for i=1..n | 循环 | |
| 双重独立循环 | ||
| 每次规模减半 | 如二分查找 | |
| 外层 | 常见于部分排序/树操作 |
对数复杂度为什么小于线性
二分查找每次把问题规模减半。规模从
因此
排序中的
课程提前点到:堆排序、归并排序、快速排序常出现
| 算法 | 为什么是 |
|---|---|
| 堆排序 | 每次调整堆约 |
| 归并排序 | 分割层数约 |
| 快速排序 | 平均分割层数约 |
指数级复杂度
指数级增长很快,通常意味着暴力穷举成本很高,后续可能需要动态规划、剪枝或贪心等策略改进。
本节例题
每一步把问题规模减半,直到规模为 1,这类过程通常是:
自查清单
- 能否从循环层数初步判断复杂度?
- 能否解释二分查找为什么是
? - 能否识别哪些问题可能出现
?