复杂度分析之很多重循环
2017-10-29 16:44
162 查看
这一篇主要是网上看到的一个复杂度题目,使用数学方法进行详细分析计算
原文地址:http://blog.csdn.net/huxiaokang1234/article/details/52929515
参考链接:https://zhidao.baidu.com/question/74096252.html
例1
我们对它进行仔细分析,它的来源应该是:
例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)
总结
找到执行次数最多语句的总次数,结果保留最高阶即为时间复杂度
原文地址: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)
总结
找到执行次数最多语句的总次数,结果保留最高阶即为时间复杂度
相关文章推荐
- 桶排序与带循环的算法时间复杂度分析
- ACM算法-时间复杂度分析(4.有关时间复杂度循环的分析)
- 二分查找法的循环与递归实现及时间复杂度分析
- 循环嵌套的时间复杂度分析
- 两个表循环的复杂度分析 征集
- 数据结构考研时间复杂度分析学习
- HashMap死循环的原因分析
- 每天学习一算法系列(25)(一个台阶总共有n 级,如果一次可以跳1 级,也可以跳2 级,求总共有多少总跳法,并分析算法的时间复杂度。)
- 深入分析 Linux 内核链表(转自ibm developerWorks 中国,IBM为开源界做了很多贡献,赞)
- 七种排序方法(稳定性、空间复杂度、时间复杂度)分析总结
- 批处理文件用ENABLEDELAYEDEXPANSION来在循环中使用复杂的多条指令
- 51NOD 1709:复杂度分析——题解
- listview的问题,position的值是0~6循环的,item很多,我要对最后一个item操作,要怎么判断是最后一个item
- Android的消息循环机制 Looper Handler类分析
- 实例分析js事件循环机制
- 自然归并排序算法时间复杂度分析
- 微软c语言循环递归笔试题分析
- 1-1数据结构--算法复杂度分析
- 数据结构习题分析:已知由一个线性链表表示的线性表中含有三类字符的数据元素,是编写算法将该线性表分割为三个循环链表,其中每个。。。。。
- GDB调试器源代码分析系列--事件循环机制(2)