很多时候一眼就能看出程序的时间复杂度,但是遇到复杂的就需要将其过程推导出来,为此总结以下两种形式
一、循环主体中的变量参与循环条件的判断
找出主体语句中与T(n)成 正比的循环变量,带入进行计算,例如:
int i = 1;
while(i <= n)
i = i*2;
其中i*2的次数与T(n)成正比,则2的T(n)次方<= n,则T(n)<=log2n。
二、循环主体中的变量与循环条件无关
可采用数学归纳法或者直接累计循环次数,多层循环时从内到外分析,只关注主体语句执行次数。这种情况分为递归程序和非递归程序
递归程序一般使用公式进行递推,例如:
int fact (int n){
if(n<=1) return 1;
return n*fact(n-1);
}
T(n)=1+T(n-1)=1+1+T(n-2)= …=n-1+T(1)
则T(N)=O(n).
非递归程序比较简单,可以直接累计次数