计算时间复杂度可以用以下步骤进行
1. 找到执行次数最多的语句
2. 计算语句执行次数的数量级
3. 用大O来表示结果
实际上就是计算循环的循环次数,循环次数最多的就是时间复杂度。
当一段程序没有循环或者不调用方法,则时间复杂度为O(1)。
下面列举一些例子:
例子一,O(1)
没有出现循环或者调用方法,时间复杂度为O(1)
temp=i;
i=j;
j=temp;
例子二,O(n)
置换语句,一个for循环运行n次
int a=0;
int b=1;
int t;
for (i=1;i<=n;i++)
{
t=b;
b=a;
a=t;
}
例子三,O(n²)
由内到外计算,O(n*n)=O(n²)
void a(int n) {
for(int i = 0; i < n; i++) { // 循环次数为 n
for(int j = 0; j < n; j++) { // 循环次数为 n
printf("Hello, World!\n"); // 循环体时间复杂度为 O(1)
}
}
}
例子四,O(log n)
假设循环次数为 t,则i=2^t,所以循环条件满足 2^t < n。
可以得出,执行次数t = log(2)(n),即 T(n) = log(2)(n),可见时间复杂度为 O(log(2)(n)),即 O(log n)。
void aFunc(int n) {
for (int i = 2; i < n; i++) {
i *= 2;
printf("%i\n", i);
}
}