复杂度分析之很多重循环

来源:互联网 发布:vscode markdown 预览 编辑:程序博客网 时间:2024/06/07 05:42

这一篇主要是网上看到的一个复杂度题目,使用数学方法进行详细分析计算

原文地址: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)


总结

找到执行次数最多语句的总次数,结果保留最高阶即为时间复杂度

原创粉丝点击