您的位置:首页 > 其它

复杂度分析之很多重循环

2017-10-29 16:44 162 查看
这一篇主要是网上看到的一个复杂度题目,使用数学方法进行详细分析计算

原文地址:http://blog.csdn.net/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)

总结

找到执行次数最多语句的总次数,结果保留最高阶即为时间复杂度
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: