这一篇主要是网上看到的一个复杂度题目,使用数学方法进行详细分析计算
原文地址:http://blog.youkuaiyun.com/huxiaokang1234/article/details/52929515
参考链接:https://zhidao.baidu.com/question/74096252.html
例1
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
for(k=0;k<=j;k++)
x++;
时间复杂度分析如下
我们对它进行仔细分析,它的来源应该是:
例2
i = 1;
while(i < n)
i = i * 2;
它的时间复杂度分析应该是这样的:假设执行了k次之后,才会停止,那么就有i=n,此时i=2*2*2*2..........*1=2^k,因为这是一个递归,所以有2^k=n,两边取对数,那么就有k=log n(底数为2),此时就是T(n)=O((log2)n),其中(log2)n表示以2为底的对数
个人分析
上述例1程序中执行次数最多语句为x++,首先分析执行次数,由于一下看不出来,因此采用常数推测看规律,当i=1执行1*2次,当i=2执行2*3次,当i=3执行3*4,....,当i=n时执行n*(n+1)次,所以执行总次数为1*2+2*3+3*4+...n*(n+1)=1(1+1)+2(2+1)+3(3+1)+···+n(n+1)=1²+1+2²+2+3²+3+····+n²+n=(1+2+3+····+n)+(1²+2²+3²+···n²)=(1+n)n/2+n(n+1)(2n+1)/6=n(n+1)/2[1+(2n+1)/3]=n(n+1)(n+2)/3=x1*n^3+x2*n^2+x3*n^1+x4*1,其中x1、x2、x3、x4均表示常数,由于求时间复杂度时不关心这些,只关心最高阶,因此时间复杂度为O(n^3)
总结
找到执行次数最多语句的总次数,结果保留最高阶即为时间复杂度