算法复杂度分析
来源:互联网 发布:2014年流行的网络歌曲 编辑:程序博客网 时间:2024/06/14 17:45
今天看了一篇关于算法复杂度分析的文章,这里简单总结一下。
大概可以分为以下几种方法:
- 实际测量运行时间随数据规模的变化
- 算法分析(找出最耗时的部分,分析其被执行了多少次)
- 倍率实验
- 均摊分析
这里重点说明倍率实验和均摊分析:
倍率实验
首先介绍几个有关概念:
若T(N)~a*N^b*log(N),则T(2N)/T(N)~2^b;
这里的g(n)~f(n)表示随着n的增大g(n)/f(n)的结果趋近于1,称f(n)为g(n)的增长数量级,比如冒泡排序的增长数量级为n^2.
方法还是用实际测时的方法,过程为:
- 开发一个输入生成器用于产生实际情况下各种可能的输入
- 对于某个输入规模(如N=250)反复运行算法(如冒泡排序),测量每次运行时间后取平均值,之后将输入规模加倍反复运行(500),也同样取平均值,计算两者的商:time2N/timeN,增大数据规模(N),直至其值趋向于极限2^b,则可推得该算法的复杂度为N^b(b为常数)
均摊分析
思路为分析所有操作的总成本,除以操作总数;
比如:用一个数组实现stack,初始大小为n,进行push操作前需要先检查当前stack中包含的数据数目,若小于n则可以直接push,复杂度为O(1),否则需要扩充数组容量为原来的2倍,后将所有数复制到新数组中,也即复杂度为O(n),但实际上每进行n个操作才会触发一次扩充操作,因此均摊下来仍然认为复杂度为O(1)
阅读全文
0 0
- 算法复杂度分析
- 算法复杂度分析
- 算法复杂度分析
- 算法复杂度分析
- STL_list_sort算法复杂度分析
- (转载)算法复杂度分析
- 算法时间复杂度分析
- 算法复杂度分析
- 算法复杂度分析
- 算法时间复杂度分析
- 常用算法复杂度分析
- 算法复杂度分析
- 算法复杂度分析
- 算法复杂度分析
- 算法复杂度分析
- 算法复杂度分析
- 算法复杂度分析
- 算法分析时间复杂度
- ZOJ
- MySQL错误信息记录
- 无法获得锁 /var/lib/dpkg/lock
- Leetcode题解-38. Count and Say
- 登录页面通过js判断两次输入的密码是否一致、是否记住密码
- 算法复杂度分析
- 第七节 基本数据类型与String类型的转换
- 102. Binary Tree Level Order Traversal
- NodeManager源码阅读 Thread.setDefaultUncaughtExceptionHandler
- 辗转相除法求最大公约数
- php字符串的有序拆分
- 【Java I/O】如何用Java读写文件
- 160个练手CrackMe-035
- Latex三个表格并列排版