时间复杂度与空间复杂度
评估一个算法的好坏,核心在于对比其时间和空间两个维度。时间复杂度主要衡量算法运行的快慢,而空间复杂度则关注运行过程中需要的额外存储空间。
大 O 渐进表示法
算法的时间复杂度通常用函数 T(N) 表示,代表基本操作的执行次数。在分析时,我们遵循大 O 渐进表示法的规则:
- 只保留最高阶项,忽略低阶项(当 N 趋于无穷大时)。
- 如果最高阶项是线性函数,去除常数系数。
- 如果没有 N 相关项,仅保留常数 1。
来看一段代码示例:
void Func1(int N) {
int count = 0;
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
++count;
}
}
for (int k = 0; k < 2 * N; ++k) {
++count;
}
int M = 10;
while (M--) {
++count;
}
}
这里的基本操作次数 T(N) = N² + 2N + 10。随着 N 增大,N² 的影响占主导,因此时间复杂度为 O(N²)。
实际运行时间测试
虽然理论推导很重要,但有时我们也想实测代码耗时。可以使用 clock() 函数记录运算前后的时间点。注意头文件需要包含 <time.h>。
#include <stdio.h>
#include <time.h>
int main() {
int i = 0;
clock_t begin = clock();
int x = 10;
int n = 100000; // 定义 n 以便循环
for(i = 0; i < n; i++) {
x++;
}
end = clock();
(, ()((end - begin) / ()CLOCKS_PER_SEC * ));
;
}


