时间复杂度分析
2016-03-05 09:44
267 查看
刚开始学习数据结构顺便把自己的新的体会写下来。 而对于数据结构而来算法的分析便是我们研究算法的基础,在这里把我对算法分析的方法做点归纳 算法是对计算机性能和资源利用的研究。 1 渐进时间复杂度 //EX:给出一个长度为N的序列,求最大连续和 int tot=0;//记录元素个数 int best=A[1];//初始最大值 for(int i=1;i<=n;i++)// for(int j=i;j<=n;j++)//检测子序列 { int sum=0; for(int k=i;k<=j;k++) { sum+=A[k];tot++;//累加元素和 } if(sum>best) best=sum;//更新最大值 } 题中我们用tot来计算累加计算的次数,同时我们也可以通过数学渐进运算来给出计算的答案这就是渐进分析 T(n)=n*(n+1)*(n*2)/6,很明显这是一个n^3方的数,所以我们可以用T(n)=Θ(n^3); 2 上界分析 上界分析就是worse-case下的程序分析,首先该算法包涵3重循环,中层最坏需要进行n次循环,最内层最坏也是需要n次循环,所以总的运算次数不大于n^3.这里我们采用的就是上界分析的方法。在算法分析中我们一般不需要得到精确的数值,只用的到算法的上届,有时我们得到的上界约等于精确计算来的上界,我们称之为紧的上界,同时我们也可能得到松的上界。我们通过修改程序对松的上界进行加紧的过程叫做优化。 3 递归时间复杂度的分析 主方法:主方法并不是一个万能的方法,它一般只适用于 T(n)=aT(n/b)+f(n);格式的递归,不过它对于一些递归的时间复杂度可以快速给出答案,在这里我就不画解答数来证明了,有需要的可以留言 case 1 n^logba>f(n) T(n)=Θ( n^logba); case 2 n^logba=f(n) T(n)=Θ(n^logba*lgk+1n); case 3 n^logba<f(n) T(n)=Θ(f(n)); EX: T(n)=aT(n/b)+f(n); T(n)=4T(n/2)+n; n^log24=n^2>n such that T(n)=Θ(n^2) 代换法:它在大多数的情况下是有效的,但是我们必须首先要知道答案,也就是说我们必须首先猜出答案,所以你要猜对它,然后使用数学归纳法进行验证,最后一步也是最重要的是找到一个常数使之成立。 EX: T(n)=4T(n/2)+n; 猜 T(n)=o(n^3) T(k)=c*k^3 k<n 我们需要证明的是K=n的情况 T(n)=4c*(n/2)^3+n; =1/2*c*n^3+n; c*n^3-()<c*n^3 所以我们只需要证明()里的数是正数 ()=1/2*c*n^3-n;所以c大于1时成立.
相关文章推荐
- java设计模式之代理模式
- 软件过程与项目管理第一周作业
- 大话设计模式之策略模式
- ubuntu 环境共享内存函数shmget与shmat的使用以及shmid:: Invalid argument错误的原因
- 穷举——六角填数
- linux 小命令收集
- 关于SAP的用户出口
- hdu1570(水题)
- [唐诗]秋夜喜遇王处士-王绩
- 大话设计模式之简单的工厂模式
- Zend Framework动作助手(Zend_Controller_Action_Helper)用法详解
- 单链表(c++实现)
- linux yum命令详解(转)
- Codeforces Round #344 (Div. 2) B 题题解 (暴力)
- 统计某个字符串中的标点符号数(c++11)
- java,编写一个矩形类,
- iOS APP 国际化
- //全排列问题的详细解答
- 返回一张图片的主色调
- CoreData版本自动变迁