算法分析与复杂度
概念讲解
主定理
对于 :
- 如果 ,
- 如果 ,
- 如果 ,
均摊分析
分析一系列操作的平均时间复杂度。
常见复杂度
| 算法 | 时间复杂度 | 空间复杂度 |
|---|---|---|
| 冒泡排序 | O(n²) | O(1) |
| 选择排序 | O(n²) | O(1) |
| 插入排序 | O(n²) | O(1) |
| 快速排序 | O(n log n) | O(log n) |
| 归并排序 | O(n log n) | O(n) |
| 堆排序 | O(n log n) | O(1) |
| 二分查找 | O(log n) | O(1) |
| DFS/BFS | O(V + E) | O(V) |
| Dijkstra | O((V+E)logV) | O(V) |
| Floyd | O(V³) | O(V²) |
考点分析
初赛考查方式
- 选择题: 复杂度分析
- 程序阅读: 计算执行次数
- 填空题: 复杂度计算
常见题型
- 主定理应用
- 均摊分析
- 复杂度比较
例题精讲
例题 1:主定理
题目: 求 T(n) = 2T(n/2) + O(n) 的复杂度。
解答:
a = 2, b = 2, d = 1
a = b^d (2 = 2^1)
T(n) = O(n^d log n) = O(n log n)例题 2:均摊分析
题目: 分析 n 次 push_back 操作的均摊复杂度。
解答:
push_back 通常是 O(1)
偶尔需要扩容,是 O(n)
均摊复杂度:O(1)练习题
- 用主定理求 T(n) = 4T(n/2) + O(n²) 的复杂度。
查看答案
a = 4, b = 2, d = 2
a = b^d (4 = 2^2)
T(n) = O(n^d log n) = O(n^2 log n)- 分析归并排序的时间复杂度。
查看答案
归并排序的时间复杂度:
- 分解: 层
- 每层合并:
- 总计:
- 比较各种排序算法的复杂度。
查看答案
| 算法 | 平均时间 | 最坏时间 | 空间 | 稳定性 |
|---|---|---|---|---|
| 冒泡排序 | 稳定 | |||
| 选择排序 | 不稳定 | |||
| 插入排序 | 稳定 | |||
| 快速排序 | 不稳定 | |||
| 归并排序 | 稳定 | |||
| 堆排序 | 不稳定 |
易错点
⚠️ 注意:
- 主定理有三种情况
- 均摊分析要考虑一系列操作
- 复杂度是最坏情况的上界
- 注意空间复杂度