
应粉丝要求出本期
一、为什么需要时间复杂度?
1.1 程序性能的度量
- 问题:如何衡量不同算法的效率?
// 示例1:求1+2+...+n int sum1(int n) { // 时间复杂度 O(n) int total = 0; for(int i=1; i<=n; i++) total += i; return total; } int sum2(int n) { // 时间复杂度 O(1) return n*(n+1)/2; } -
结论:
sum2比sum1更高效(尤其当n很大时)
1.2 时间复杂度的定义
-
定义:算法执行时间随输入规模增长的增长率
- 特点:
-
关注最坏情况下的时间消耗
-
忽略常数项和低阶项(关注增长趋势)
-
使用大O表示法(如 O(n²))
-
二、大O表示法核心规则
2.1 常见时间复杂度
| 复杂度 | 名称 | 示例代码 |
|---|---|---|
| O(1) | 常数复杂度 | 直接访问数组元素 |
| O(log n) | 对数复杂度 | 二分查找 |
| O(n) | 线性复杂度 | 遍历数组 |
| O(n log n) | 线性对数复杂度 | 快速排序 |
| O(n²) | 平方复杂度 | 双重循环(冒泡排序) |
| O(2ⁿ) | 指数复杂度 | 暴力破解子集问题 |
| O(n!) | 阶乘复杂度 | 全排列问题 |
2.2 计算步骤
-
确定输入规模(n)
-
统计基本操作的执行次数
-
保留最高阶项,去掉系数
示例:
for(int&

3647

被折叠的 条评论
为什么被折叠?



