- 1、本文档共41页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第4章递归式算法分析与设计杭电褚一平
* * 第4章 递归式 ?2T (n / 2) ? ?(n) 递归式 ? ?(1) T(n) ? ? 如果n ? 1 如果n ? 1 其解为:T(n)= Θ(nlgn) 注意问题: 1. 假设自变量为整数 2. 忽略边界条件 3. 忽略上取整、下取整的影响;先忽略,等得到结果后 再确定他们是否重要。 本章简介 介绍三种递归式的解法 代换法(substitution method) 先猜测有某个界存在,然后利用数学归纳法 证明该猜测的正确性! 递归树方法(recursion-tree-method) 将递归式转换成树形结构,树中的节点代表 在不同递归层次付出的代价,最后利用对和 式限界的技术来解出递归式。 主方法(master metjod) 给出递归形式T(n)=aT(n/b)+f(n)的界,其中 a≥1,b1,f(n)是给定的函数。 4.1代换法 用代换法解递归式需要两个步骤: 猜测解的形式 用数学归纳法找出使解真正有效的常数 代换法很有效,只能用于解的形式很容易猜的 情形 步骤 确定其界,以Θ记号为例,定义为: Θ(g(n)) = {f(n):存在正常数c1,c2,和n0使对所有的n ≥ n0,有 0 ≤ c1g(n) ≤ f(n) ≤ c2g(n) } 对边界条件成立: n0是正常数,n = n0,0 ≤ c1g(n) ≤ f(n) ≤ c2g(n) 常常是n=1的时候不成立这个需要注意。! 4.1代换法 [例] T(n)=2T(?n/2?)+n 猜其解为T (n) = O(n lg n) 即存在常数c使得T (n) ≤ cn lg n 于是 T(n)≤ 2(c ?n/2?lg(?n/2?)) + n ≤ cn lg(n/2) + n =cn lg n - cn lg 2 + n =cn lg n - cn + n ≤ cn lg n 最后一步只需c ≥ 1就可以成立 (续上页) 边界条件: 由定义,只需要找出常数n0 ,使得当 n n0 时, T(n)≤ cn lg n即可 取n0 =2,可证边界条件成立 如果假设T(1)=1,则取n0 =1时有问题,因 为此时的cn lg n=0,不为1。 4.1代换法 不存在通用的方法,需要经验 试探法 递归树 类似的先例 T(n)=2T(?n/2?+17)+n 猜T(n)=O(nlgn) 先证明递归式上下界,不断缩小不确定 性区间 对合并排序:下界T(n)=Ω(n),上界 T(n)=O(n2) [经验]减掉一个低阶项 [例] T (n) = T (?n/2?) + T (?n/2?) + 1 试猜解T (n) = O(n),代入T (n) ≤ cn 可发现 T (n)≤ c ?n/2? + c ?n/2? + 1 =cn + 1 与所猜解并不一致 减掉一个低阶项:T (n) ≤ cn – b T (n)≤ (c ?n/2? - b) + (c ?n/2? - b) + 1 =cn - 2b + 1 ≤ cn – b 只要b ≥ 1即可成立 4.1代换法 [经验]避免陷阱 [例] T(n)=2T(?n/2?)+n 猜解T (n) = O(n),取T (n) ≤ cn T (n)≤ 2(c ?n/2?) + n ≤ cn + n =O(n) , 错误!c是常数! [例] ( ) 2 ( ) lgT n T n? ?? ?? ? [经验]改变变量 取m = lg n,则n =2m , T (2m) = 2T (2m/2) + m 取S(m) = T(2m),则S(m) = 2S(m/2) + m 于是S(m) = O(m lg m) T (n) = T (2m) = S(m) = O(m lg m) = O(lg n lg lg n) n 4.2递归树方法 递归树是一种得到好猜测的直接方法 通常可以容忍小量的不良性 [例]T (n) = 3T (?n/4?) + Θ(n2) 忽略顶和底函数,建立递归式T (n) = 3T(n/4) + cn2的递归树,常系数c 0 假设n是4的幂 cn2 ? ( ) cn ? ? ? ( )log 4 4 3 ) cn2 ? ?(nlog 4.2递归树方法 3 3 2 2 3 n ?1 16 16 16 T (n) ? cn2
文档评论(0)