复杂度分析之很多重循环
来源:互联网 发布: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)
总结
找到执行次数最多语句的总次数,结果保留最高阶即为时间复杂度
阅读全文
0 0
- 复杂度分析之很多重循环
- 算法分析之复杂度
- 循环嵌套的时间复杂度分析
- 算法分析(1)-循环的时间复杂度
- 数据结构系列之复杂度分析
- ACM算法-时间复杂度分析(4.有关时间复杂度循环的分析)
- 图算法时空复杂度分析及重定向
- 算法分析之时间复杂度与空间复杂度
- 桶排序与带循环的算法时间复杂度分析
- 重拾算法(一):算法效率分析(空间复杂度和时间复杂度)
- 数据结构之时间.空间复杂度分析
- 编程之美-时间复杂度分析
- 复杂度分析
- 数组操作系列之循环去重
- 控制流分析之循环
- 复杂度分析(1)-渐进复杂度,空间复杂度
- 时间复杂度&空间复杂度分析
- 二分查找法的循环与递归实现及时间复杂度分析
- 如何用atom直接运行python程序
- 饮料新品难存活,经销商需避开哪些选品雷区
- [Unity 网络]网络基础
- 用JavaSE知识写生成验证码功能
- java学习第39天,集合的排序
- 复杂度分析之很多重循环
- 3.线性表的链式表示
- Leetcode题解-31. Next Permutation
- Java总结第一篇——Java的八大基本类型
- SSH整合案例
- Java基础汇总
- Java基础2
- 63. Unique Paths II
- 树莓派3B 无显示器,无键盘,无Linux系统,无网线 配置WIFI连接