时间复杂度与空间复杂度
评估一个算法的优劣,核心在于两个维度:时间和空间。时间复杂度衡量算法运行的快慢,空间复杂度则关注运行过程中额外占用的存储空间。
一、时间复杂度基础
算法的时间复杂度通常表示为函数 T(N),代表基本操作的执行次数。需要注意的是,不同编译器编译所需时间会有差异,新编译器通常更快,但这不影响我们分析算法本身的逻辑效率。
比较 T(N) = N 和 T(N) = N^2 时,显然前者在数据量增大时表现更优。
大 O 渐进表示法
为了简化分析,我们遵循以下规则推导大 O 阶:
- 保留最高阶项:当 N 趋于无穷大时,低阶项影响微乎其微,直接忽略。
- 去除常数系数:如果最高阶项是线性函数(如 5N),去掉系数 5,只保留 N。
- 常数项归一:如果没有 N 相关项,仅含常数,统一用 1 取代。
示例分析
void Func1(int N) {
int count = 0;
// 嵌套循环,执行 N*N 次
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
++count;
}
}
// 线性循环,执行 2*N 次
for (int k = 0; k < 2 * N; ++k) {
++count;
}
// 常数循环,执行 10 次
int M = 10;
while (M--) {
++count;
}
}
Func1 的基本操作次数为 T(N) = N² + 2N + 10。根据规则,保留最高阶项 N²,因此时间复杂度为 O(N²)。
常见复杂度对比
| 表达式 | 大 O 表示 | 类型 |
|---|---|---|
| 5201314 | O(1) | 常数阶 |
| 3n+4 | O(n) | 线性阶 |
| 3n²+4n+5 |


