递归与分治策略.pptxVIP

  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文档。上传文档
查看更多
递归与分治策略; 分治是一种重要的算法分析的方法,就是把一个复杂的问题分成两个或更多的相同或者相似的子问题,再把子问题分成更小的子问题,直到最后的子问题可以简单求解,而原问题的解通过子问题的解的合并或简单运算得到。 递归是设计和描述算法的一种有力的工具,它是通过函数调用自身将问题转化为本质相同但规模较小的子问题,递归方法具体易于描述、证明简单等优点。 例如汉诺塔问题。想将n个盘子从A移到C (1)借助C将n-1个盘子移到B (2)把A座剩下的一个盘子移到C (3)借助A将n-1个盘子从B移到C ; 分治与递归之间存在密切关系,“分治”是解决问题的战略思想,“递归”是编程中的战术手段。由于分治和递归之间存在的这种关系,所以一个问题用“分治”的策略分析后,常常用“递归”的方法编程实现。“递归”从形式上来说不是必须的,??以用循环和栈来代替递归,但递归编程简洁的形式令人印象非常深刻。分治与递归像一对孪生兄弟,他们的结合产生了许多高效的算法。;1.排队购票问题; 令f(m,n)表示有m个人手持50元的钞票,n个人手持100元的钞票的排队购票的总数,分三种情况来讨论这个问题。 (1)n=0:这意味着排队购票的所有人手里手中都拿着50元的钱币,由于拿着同样面值钞票的人对换位置后为同一种排队方案,那么这m个人的排队总数为1,即f(m, 0)=1。 (2)mn:此时,排队购票的人中手持50元的人数小于小于手持100元的钞票的人数,即使把m张50元都找出去,仍会出现找不开钱的局面,所以这时的方案总数为0,即f(m, n)=0; ;(3)其他情况:第m+n个人站在第m+n-1个人的后面,则第m+n 个人的排队方式可由下列两种情况获得: 第m+n个人手持100元的钞票,则在他之前的m+n-1个人中有m个人手持50元,n-1个人手持100元的钞票,此种情况共有f(m,n-1)种方案数 第m+n个人手持50元的钞票,则在他之前的m+n-1个人中有m-1个人手持50元,n个人手持100元的钞票,此种情况共有 f(m-1,n)种方案数 此时可以得到f(m, n)的递归关系式f(m, n)=f(m,n-1)+f(m-1,n);; f(m,n) =;2、放苹果问题; 设f(m, n)为m 个苹果,n个盘子的放法数目,则先对n做讨论 (a)如果n==0时,f(m,n)=0;如果n==1||m==0,f(m, n)=1;当n=1时,所有的盘子都必须放在一个盘子里,所以返回1;当m=0时,表示没有盘子可放,定义为1种放法。 (b)如果nm, 则必定有n-m个盘子永远空着,去它们对盘子的摆放不产生影响,即f(m, n)=f(m, m) (c)如果n ≤ m,不同的放法可以分成两类:即有至少一个盘子空着或者所有盘子都有苹果,前一种情况相当于f(m, n)=f(m, n-1);后一种情况可以从每个盘子中拿掉一个苹果,不影响不同放法的数目,即f(m, n)=f(m-n, n) 。总的放苹果的放法数目等于两者之和。 即f(m, n)=f(m, n-1)+f(m-n, n) ;package apple; public class apple { public static void main(String[] args) { System.out.println(f(6,9)); } static int f(int m, int n){ if(n==0) return 0; if(m==0||n==1) return 1; if(mn) return f(m,m); return f(m,n-1)+f(m-n,n); } };3、整数划分问题;注意:m的取值范围为[1,∞),我们可分段讨论。 ①m=1 ②1mn ③m=n ④mn;④当 n=m ,q(n,n)=1+q(n,n-1) (a) 划分中包含n的情况,即n1=n的划分,只有一个即{n}; (b) 划分中不包含n的情况, 即n1≤n-1的划分,这时划分中最大的数字也 一定比n小,即n的所有(n-1)划分。 ????????因此 q(n,n) =1 + q(n,n-1);;正整数n的划分数p(n)=q(n, n)。 ;;思考题:红与黑 ;算法设计:; 通过一步一步枚举进行递归的方法是很常见的。在此例中,枚举了在一个方格点上的四种可能走法。在前面放苹果的例题中,在寻

文档评论(0)

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

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

1亿VIP精品文档

相关文档