- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法分析-Read
第2章 算法分析 算法分析的概念 算法运行时间举例 最大连续子序列之和问题 静态搜索问题 检验一个算法分析 Big-Oh分析法的限制 评价算法好坏的标准 执行算法所耗费的时间,即效率问题。 执行算法所耗费的存储空间,主要考虑辅助的存储空间。 算法应易于理解,具有可读性,易于编码,易于调试等。 健壮性,即当输入一些非法数据时,算法也应做出适当的反映或进行处理。 算法分析的概念 算法所花费的运行时间取决于它所处理的数据输入量。 算法的运行时间是数据输入量的一个函数。 而确切的函数值依赖于许多因素。 对于一个给定计算机上的给定程序,可以在图中描绘出运行时间的函数。 算法分析中的时间函数图解 图中给出了四个程序的运行时间图,这些曲线代表了在算法分析中遇到的四个函数:线性函数、O(NlogN)、二次方函数、立方函数,输入规模N从1至100,运行时间为0至10毫秒。 这些曲线最显著的特征就是当数据输入量较大时,平方算法和立方算法无法与其他算法竞争。 下表所示的是以增长率的增长次序来排列这些算法运行时间的函数。 算法运行时间举例 数组中的最小元素:给出一个具有N项的数组,找出其最小元素。 平面中距离最近的两点:在平面(直角坐标系)中提供N个点,找出一对距离最近的点。 最小元素问题 解决方案: 定义一个变量min存储最小元素。 初始化min为第一个元素。 顺序扫描整个数组,将min更改为合适的元素。 运行时间:为O(N),即为线性的。 寻找距离最近点问题 解决方案: 计算每对点间的距离。 保留最短距离。 运行时间:计算比较花费时间,存在N(N-1)/2对点,大约为 对点。 最大连续子序列之和问题 给出N个整数(可为负)A1,A2,…,An,找出 的最大值(与队列次序相同),如果所有整数为负,最大值为0。 解决方案: 简单易懂的O(N3)算法 改进的O(N2)算法 线性算法 简单易懂的O(N3)算法 最简单的算法就是直接穷举搜索算法。 例如:最大连续子序列之和的立方算法。 int MaxSubsequenceSum( int a[] ) { int MaxSum=0; int i,j,k,ThisSum; for(i=0;in;i++) for(j=i;jn;j++) /*n9是数组a[]的长度*/ { ThisSum=0; for(k=i; k=j;k++) { MaxSum=ThisSum; SeqStart=i; SeqEnd=j; } } return MaxSum; } 算法的运行时间由内部循环9行和10行决定,下列四个表达式被重复执行: 初始化 k = i; 测试 k = j; 增长 ThisSum += a[ k ]; 调整 k++ 。 定理2-1:估算 定理:满足关系1=i=k=j=N的有序三元组(i,j,k)的值为N(N+1)(N+2)/6。 定理分析:运行结果为最内部循环的次数,为立方次的运行时间,算法中余下的工作已经不重要了。至少在每次内部循环的时候已经被做了。因此,算法为O(N3) 。 改进的O(N2)算法 改进算法的依据是: 例如:一个最大连续子序列之和的平方算法。 int MaxSubsequenceSum( int a[] ) { int MaxSum=0; int i,j,ThisSum; for(i=0;in;i++) { ThisSum=0; for(j=i;j=n;j++) { ThisSum+=a[j]; if(ThisSumMaxSum) { MaxSum=ThisSum; SeqStart=i; SeqEnd=j; } } } return MaxSum; } 定理2-2 定理: Ai,j为任意序列,且Si,j0,如果qj,则Ai,q不是值最大的连续子序列。 证明:从i到q的序列的元素之和为从i到j的序列的元素之和加上从j+1到q的子序列的元素之和,则Si,q=Si,j+Sj+1,q 因为Si,j0,所以 Si,qSj+1,q,Ai,q不是一个最大的连续子序列。 注:Ai,j作为从i到j的子序列,Si,j为其和。 定理2-3 定理:对于任意i,Ai,j为Si,j0的第一个序列,则对于任意i=p=j,且p=q,则 Ap,q也不是和最大的连续子序列或者只是一个与一个已经存在的和最大的连续子序列的和相等。 定理证
文档评论(0)