算法分析与设计第四讲递归与分治一.docxVIP

算法分析与设计第四讲递归与分治一.docx

  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文档。上传文档
查看更多
算法分析与设计第四讲 递归与分治 1 主要内容 ?递归 ?递归实例 ?递归式 ?分治法 ?分治法实例 2 递归的概念 ?递归函数 ?用函数自身给出定义的函数 ?递归算法 ?一个算法包含对自身的调用 ?这种调用可以是直接的,也可以是间接的 3 递归举例 ?阶乘函数 ? 1 n ? 0 递归出口 n! ? ? n ? 0 ?n ( n ? 1)! 递归方程 n!? 1? 2 ? 3 ? ? (n ? 1) ? n 4 递归举例 ?Fibonacci数列 ?无穷数列1,1,2,3,5,8,13,21,34, 55,… ? 1 n ? 0 ? 1 n ? 1 F (n) ? ? ? ? F (n ? 2) n ? 1 ?F (n ?1)  递归出口 递归方程 5 递归举例 ?Fibonacci数列非递归定义 1 ?? 1 ? 5 ?n?1 ? 1 ? 5 ?n?1 ? F (n) ? ?? ? ? ? ? ? 5 ?? 2 ? ? 2 ? ? ?? ? ? ? ? 6 递归举例 ?整数划分问题 ?将正整数n表示成一系列正整数之和: n=n1+n2+…+nk,其中n1≥n2≥…≥nk≥1,k≥1 ?正整数n的这种表示称为正整数n的划分 ?正整数n的不同的划分个数称为正整数n的划分数p(n) ?目标:求正整数n的不同划分个数p(n) ?例,正整数5的划分,p(5)=7 7 递归举例 ?整数划分问题 ?引入m,将最大加数n1不大于m的划分个数记作q(n,m) ? 1 ? q(n, n) ? q(n, m) ? ? 1 ? q(n, n ?1) ? ? ?1) ? q(n ? m, m) ?q(n, m  ? 1, m ? 1 n ? m n ? m n ? m ? 1 ?p(n)=q(n,n) 8 递归举例 ?整数划分问题 9 递归举例 ?汉诺(Hanoi)塔问题 ?设a,b,c是3个塔座 ?开始时,在塔座a上有一叠共n个圆盘,这些圆盘自 下而上,由大到小地叠在一起。各圆盘从小到大编号为1,2,…,n ?要求将塔座a上的圆盘移到塔座b上,并仍按同样顺序叠置。在移动圆盘时应遵守以下移动规则: 每次只能移动1个圆盘 任何时刻都不允许将较大的圆盘压在较小的圆盘之上 在满足移动规则1和2的前提下,可将圆盘移至a,b,c中任一塔座上 10 递归举例 ?汉诺(Hanoi)塔问题分析 ?n=1时,直接a-b即可 ?n1时,借助c实现移动,可先将n-1个圆盘按照规 则a-c,再将大圆盘a-b,最后将n-1个圆盘c-b ?可以通过递归实现 11 递归 ?递归的概念非常重要 ?优点 ?结构清晰,可读性强,而且容易用数学归纳法来证明算法的正确性,为设计算法、调试程序带来很大便利 ?缺点 ?递归算法的运行效率较低 12 递归式(Recurrence) ?当一个算法包含对自身的递归调用时,其 运行时间通常可以用递归式来表示 ?例,对于合并排序,其最坏情况时间复杂 度 ?? (1) if n ? 1 T ( n) ? ? ? ? ( n ) if n ? 1 ?2T ( n / 2) ?其解为 T ( n ) ? ?( n lg n) 13 递归式的解法 ?代换法(substitution method) ?递归树方法(recursion-tree method) ?主方法(master method) 14 代换法(substitution method) ?步骤 ?猜测解的形式 ?用数学归纳法证明之 ?只适用于解的形式很容易猜的情形?如何猜测则需要经验 ?例 ? ? ? n T ( n ) ? O ( n lg n) T ( n ) ? 2T ( ? n / 2 ?) T ( n ) ? 2T ( ? n / 2 ? ? 17) ? n T ( n ) ? O ( n lg n) ? ? T ( n ) ? T ( ? n / 2 ?) ?1 T ( n ) ? O (lg n) ? ? 15 递归树方法(recursion-tree method) ?每一个节点代表递归函数调用集合中一个子问题的代价,将所有层的代价相加得到总代价 ?当用递归式表示算法的时间复杂度时,可 用递归树的方法 ?递归树方法模拟了算法的递归执行,可以由递归树方法产生对算法时间复杂度的较好猜测 16 递归树方法示例 求解 T(n) = T(n/4) + T(n/2)+ n2 17 主方法(master method) ?T(n) = aT(n/b) + f(n) ?a=1, b1, a和b均为常数 ?f(n)是渐近正函数 18 主定理(master theorem) ?对于递归式,比较f (n)和n logba ?若对于某常数ε 0, f ( n ) ? O ( n log b

文档评论(0)

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

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

1亿VIP精品文档

相关文档