第二章算法分析.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第二章算法分析.ppt

第二章 算法分析 本章目标 如何估计一个程序(算法)的运行时间 如何将一个程序的运行时间从天或年降低到秒 本章纲要 1.算法分析基础 2.模型 3.要分析的问题 4.运行时间计算 5.小结 1.算法分析基础 函数增长率:函数增长的速度 4个关于函数增长率的定义: 定义1:如果存在正常数c和n0,使得当N n0时,T(N) cf(N),则记为T(N) =O(f(N)) 定义2:如果存在正常数c和n0,使得当N n0时,T(N) cg(N),则记为T(N) = (g(N)) 定义3:T(N) = (h(N)),当且仅当T(N) =O(h(N))和T(N) = (h(N)) 定义4:如果T(N) =O(p(N))且T(N) (p(N)),则T(N) =o(p(N)) 1.算法分析基础 【例2-1】比较f1(n)=n2,f2(n)=2n+20的增长率关系 解: 当n6时,f1更小; 随后,f1明显胜出。 当n增长时, f1的增 长率大于f2的增长率 令c=1,n0=6,则 f1(n) f2(n),因此 f1(n)= (f2(n)) 或f2(n)=O(f1(n)) 1.算法分析基础 【例2-2】g(N)=2N2,分析g(N)与N4,N3,N2,N的增长率关系。 解: 令c=1,n0=2,g(N) N4,所以g(N)=O(N4),又有,g(N) (N4), 得到g(N) (N4),所以g(N)=o(N4) 同理,令c=1,n0=2,g(N)=O(N3),又g(N) (N3),所以g(N)=o(N3) 令c=2,n0=1,g(N) 2N2,所以g(N)=O(N2),又有, g(N) 2N2, 得到g(N)= (N2),所以g(N)= (N2) 令c=1,n0=1,g(N) N,所以g(N)= (N) 1.算法分析基础 法则1: 如果T1(N)=O(f(N))且T2(N)=O(g(N))那么 (a)T1(N)+T2(N)=max(O(f(N)), O(g(N))) 如N=N2, N3=N4, N+N3=N4 (b)T1(N)*T2(N)= O(f(N)*g(N)) N*N3=N2*N4 法则2: 如果T(N)是一个k次多项式,则T(N)= (Nk) 当N=1时,N2=1*(N2+N+1),同时N2+N+1=2*N2,所以上式成立。 1.算法分析基础 法则3: 对任意常数k: logkN=O(N), logN=O(N1/k) 一般:c,logkN,N,NlogN,N2,N3,2N,N! 1.算法分析基础 1.O,o, , 表示函数相对增长率时,应忽略低阶项和常数项 例如,O(2N2+3N)应表示成O(N2) 2.确定任两个函数增长率使用洛必达法则 极限=0:f(N)=o(g(N)) 极限=c:f(N)= (g(N)) 极限= :g(N)=o(f(N)) 极限不存在 1.算法分析基础 【例2-3】求NlogN和N1.5之间的增长率关系。 解: logN=O(N0.5),N=O(N) NlogN=O(N1.5) 【例2-4】求N3和2N之间的增长率关系 解: 应用洛必达法则, lim(N3/2N)=lim[6/(2Nln32)]=0, N3=o(2N) 2.模型 假设计算机运行基本运算,如加减乘除等,花费时间相同,为一个指令周期。 假设内存无限 3.要分析的问题 时间复杂度? Tavg(N):算法所花费的平均运行时间 有时难以定义 有时不好计算 Tworst(N):算法最坏情况下的运行时间 O(f(N)) 4.运行时间计算 【例2-5】计算 解: Int sum(int N){ int i,Partialsum; Partialsum=0; for(i=1;i=N;i++) Partialsum+=i*i*i; Return Partialsum; } 4.运行时间计算 基本原则:从内向外分析。 法则1 — for循环 (For循环内语句)*迭代次数 for(i=1; in; i++) 1+n+(n-1)=O(n) x=x+y; 2=O(1) 时间复杂度: 4n=O(n) 法则2—嵌套的for循环 最内部语句*连乘外循环次数 for(j=

文档评论(0)

docinpfd + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:5212202040000002

1亿VIP精品文档

相关文档