程序的时间复杂度计算

很多时候一眼就能看出程序的时间复杂度,但是遇到复杂的就需要将其过程推导出来,为此总结以下两种形式


一、循环主体中的变量参与循环条件的判断

找出主体语句中与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).

非递归程序比较简单,可以直接累计次数

    原文作者:Leonban
    原文地址: https://blog.csdn.net/Hearbeat/article/details/76222930
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞