- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法设计-1
* 算法设计与分析 算法概述 算法的复杂性 (5)算术运算: O(f(n))+O(g(n)) = O(max{f(n),g(n)}) ; O(f(n))+O(g(n)) = O(f(n)+g(n)) ; O(f(n))*O(g(n)) = O(f(n)*g(n)) ; O(cf(n)) = O(f(n)) ; g(n)= O(f(n)) ? O(f(n))+O(g(n)) = O(f(n)) 。 * 算法设计与分析 算法概述 算法的复杂性 规则O(f(n))+O(g(n)) = O(max{f(n),g(n)}) 的证明: 对于任意f1(n) ? O(f(n)) ,存在正常数c1和自然数n1,使得对所有n? n1,有f1(n) ? c1f(n) 。 类似地,对于任意g1(n) ? O(g(n)) ,存在正常数c2和自然数n2,使得对所有n? n2,有g1(n) ? c2g(n) 。 令c3=max{c1, c2}, n3 =max{n1, n2},h(n)= max{f(n),g(n)} 。 则对所有的 n ? n3,有 f1(n) +g1(n) ? c1f(n) + c2g(n) ? c3f(n) + c3g(n)= c3(f(n) + g(n)) ? c32 max{f(n),g(n)} = 2c3h(n) = O(max{f(n),g(n)}) . * 算法设计与分析 算法概述 算法的复杂性 图1 时间函数的增长率 常见的多项式阶有: O(1) O(logn) O(n) O(nlogn) O(n2) O(n3) O(2n) O(n!) O(nn) 常见的指数阶有: 对规模较小的问题,决定算法 工作效率的可能是算法的简 单性而不是算法执行的时间. 当比较两个算法的效率时, 若两个算法是同阶的,必须进 一步考察阶的常数因子才能 辨别优劣. * 算法设计与分析 算法概述 算法的复杂性 * n logn nlogn n2 n3 2n 1 0 0 1 1 2 2 1 2 4 8 4 4 2 8 16 64 16 8 3 24 64 512 256 16 4 64 256 4096 65536 32 5 160 1024 32768 4294967296 * 算法设计与分析 算法概述 算法的复杂性 3.渐进分析 时间复杂性渐进阶分析的规则:(最坏情况) 1). 赋值,比较,算术运算,逻辑运算,读写单个变量(常量)只需1单位时间 2). 执行条件语句 if c then S1 else S2 的时间为TC +max(TS1,TS2). 3). 选择语句 case A of a1: s1;a2: s2;...; am: sm 需要的时间为max(TS1,TS2 ,..., TSm). 4). 访问数组的单个分量或纪录的单个域需要一个单位时间. 5). 执行for循环语句的时间=执行循环体时间*循环次数. 6). while c do s (repeat s until c)语句时间=(Tc+Ts)*循环次数. 7). 用goto从循环体内跳到循环体末或循环后面的语句时,不需额外时间 8). 过程或函数调用语句 对非递归调用,根据调用层次由里向外用规则1-7进行分析; 对递归调用,可建立关于T(n)的递归方程,求解该方程得到T(n). 例 题1-1 算法设计与分析 算法1-2:二分查找 (假定c是A的最后一元) 例 题 1-1 分析:问题规模为m,元运算执行时间设为赋值a,判断t, 加法s, 除法d, 减法b. 最坏情况Tmax(m) = 6a+4t+2s+d+(2a+2s+3t+d) logm=13+8logm function b-search(c) { L:=1; U:=m; 2 found:=false; 1 while not found and U=L do 3 { i:=(L+U)div2; 3 if c=A[i] 1 then found:=true 1 else if cA[i] 1 then L:=i
文档评论(0)