普及层次第三讲递归递推分治解答.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文档。上传文档
查看更多
[算法分析] 利用递推公式进行求解,因为N 不大于100,因此定义数组时10个下标变量就足够了。 为了避免反复过程调用,我们采用以下主要步骤: 1、先利用双重循环将10以内的方案数计算后,存放在数组A中; 2、输入N; 3、在一重循环中,利用公式直接求和。 4、输出方案数K。 [程序清单] 略 [运行数据及测试结果] 递归与分治基本原理 递推与递归 递归与递推表面看来是相逆的过程,其实也是相似的,最终的计算都是从小算到大。 递推的使用环境要求高导致了递推的高效性,递推没有重复计算什么数据,保持了高效。 递归大多数会重复计算子问题,导致时间浪费,所以一般不要使用过深的递归,甚至会空间溢出。 棋盘覆盖问题 还可以将棋盘覆盖推广到一般情况: 大数的运算 加法 减法 乘法 100! 93 326215 443944 152681 699263 856266 700490 715968 264381 621468 592963 895217 599993 229915 608914 463976 156578 286253 697920 827223 758251 185210 916864 000000 000000 000000 000000 除法 …… 大整数的乘法 问题描述: 设X和Y都是n位的二进制整数,请设计一个有效的算法,可以进行两个n位大整数的乘法运算。 分析: 1.小学的方法:O n2 效率太低 大整数的乘法 2.可以用分治法的原理设计一个更有效的算法。 将n位的二进制整数分为2段: 大整数的乘法 效率: 4次n/2位整数乘法 AC, AD,BC, BD ; 3次不超过n位整数加法; 2次移位 分别对应乘以2n和2n/2 所有加法和移位共用O n 步计算。 改进:把 1 式稍作修改: XY AC2n + A-B D-C +AC+BD 2n/2 + BD 2 效率: 3次n/2位整数乘法 AC, BD, A-B D-C ; 6次不超过n位整数加、减法和2次移位; begin //两个n位整数相乘 伪代码 X abs X ; Y abs Y ; if n 1 return S*X*Y ; else begin A: X的左边n/2位; B: X的右边n/2位; C: Y的左边n/2位; D: Y的右边n/2位; m1: Mult A, C, n/2 ; m2: Mult A-B, D-C, n/2 ; m3: Mult B, D, n/2 ; S: S* m1* 2n + m1+m2+m3 *2n/2+m3 ; return S; end;End; 大整数的乘法 分析 传统的方法:O n2 ?效率太低 分治法: O n1.59 ü较大的改进 更快的方法? 对于大整数乘法,它能在O nlogn 时间内解决。 是否能找到线性时间的算法? 目前为止还没有结果 。 循环赛日程表 例如: 循环赛日程表 分析: 法1:分治策略 按分治策略,将所有的选手分为两半,n个选手的比赛日程表就可以通过为n/2个选手设计的比赛日程表来决定。 递归地用对选手进行分割,直到只剩下2个选手时,比赛日程表的制定就变得很简单。这时只要让这2个选手进行比赛就可以了。 循环赛日程表 分析 法2:递推法 迭代法 循环赛日程表 递推法 迭代法 即2k个选手的比赛日程在2k-1个选手的比赛日程基础上通过迭代完成,每次迭代,将问题分为4个部分: 左上角: 2k-1个选手前半程的比赛日程 左下角:另2k-1个选手前半程的比赛日程,由左上角加2k-1得到 右上角:将左下角抄到右上角,得到另2k-1个选手后半程的比赛日程。 右下角:将左上角抄到右下角,得到2k-1个选手后半程的比赛日程。 谢 谢! 8 8 7 7 8 6 6 7 5 4 4 6 5 5 4 3 2 1 1 3 3 2 2 1 12 11 11 10 9 9 12 12 11 10 10 9 8 7 7 6 5 5 8 8 7 6 6 5 4 3 3 2 1 1 4 4 3 2 2 1 1 1 1 1 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 1 × 1 1 0 1 A n/2位 B n/2位 C n/2位 D n/2位 X Y 则: X A2n/2+B(乘2n/2,相当于左移n/2位) Y C2n/2+D 于是: XY A2n/2+B C2n/2+D AC2n + AD+BC 2n/2 + BD 1 时间复杂性分析 T n O n2 ?没有改进 时间复杂性分析 T n O nlog3 O n1.59 ü较

文档评论(0)

金不换 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档