分治算法PP【信息技术】.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文档。上传文档
查看更多
分治算法(一) 1 基本思想 分而治之方法与软件设计的模块化方法非常相似。为了解决一个大的问题,可以: 把它分成两个或多个更小的问题; 分别解决每个小问题; 把各小问题的解答组合起来,即可得到原问题的解答。 注意: 小问题通常与原问题相似,可以递归地使用分而治之策略来解决。 分割原则:子问题的规模大致相同,这主要是平衡子问题的思想。 例1:找出伪币 问题描述 给你一个装有1 6个硬币的袋子。1 6个硬币中有一个是伪造的,并且那个伪造的硬币比真的硬币要轻一些。你的任务是找出这个伪造的硬币。为了帮助你完成这一任务,将提供一台可用来比较两组硬币重量的仪器,利用这台仪器,可以知道两组硬币的重量是否相同。 分析: 方法1 方法2(分而治之方法) 例2:金块问题 问题描述: 有一个老板有一袋金块。每个月将有两名雇员会因其优异的表现分别被奖励一个金块。按规矩,排名第一的雇员将得到袋中最重的金块,排名第二的雇员将得到袋中最轻的金块。根据这种方式,除非有新的金块加入袋中,否则第一名雇员所得到的金块总是比第二名雇员所得到的金块重。如果有新的金块周期性的加入袋中,则每个月都必须找出最轻和最重的金块。假设有一台比较重量的仪器,我们希望用最少的比较次数找出最轻和最重的金块。 问题分析 方法1 方法2——分而治之方法 例3 矩阵乘法问题 问题描述: 两个n×n 阶的矩阵A与B的乘积是另一个n×n 阶矩阵C,C可表示为假如每一个C(i, j) 都用此公式计算,则计算C所需要的操作次数为n3 m+n2 (n- 1) a,其中m表示一次乘法,a 表示一次加法或减法。 分析: 为了得到两个矩阵相乘的分而治之算法,需要: 定义一个小问题,并指明小问题是如何进行乘法运算的; 确定如何把一个大的问题划分成较小的问题,并指明如何对这些较小的问题进行乘法运算; 最后指出如何根据小问题的结果得到大问题的结果。 为了使讨论简便,假设n 是2的幂(也就是说, n是1,2,4,8,1 6,.)。 注意事项 分而治之方法很自然地导致了递归算法的使用。在许多例子里,这些递归算法在递归程序中得到了很好的运用。实际上,在许多情况下,所有为了得到一个非递归程序的企图都会导致采用一个模拟递归栈。 不过在有些情况下,不使用这样的递归栈而采用一个非递归程序来完成分而治之算法也是可能的,并且在这种方式下,程序得到结果的速度会比递归方式更快。 分治算法(二) 应用举例1:归并排序 问题描述 可以运用分而治之方法来解决排序问题,该问题是将n 个元素排成非递减顺序。 分析: 分而治之方法通常用以下的步骤来进行排序算法: 若n 为1,算法终止; 否则, 将这一元素集合分割成两个或更多个子集合, 对每一个子集合分别排序, 然后将排好序的子集合归并为一个集合。 示例: 初始序列 [8] [4] [5] [6] [2] [1] [7] [3] 归并到b [4 8] [5 6] [1 2] [3 7] 复制到a [4 8] [5 6] [1 2] [3 7] 归并到b [4 5 6 8] [1 2 3 7] 复制到a [4 5 6 8] [1 2 3 7] 归并到b [1 2 3 4 5 6 7 8] 参考程序 应用举例2 :快速排序 基本思想 在这种方法中, n 个元素被分成三段(组):左段l e f t,右段r i g h t和中段m i d d l e。中段仅包含一个元素。左段中各元素都小于等于中段元素,右段中各元素都大于等于中段元素。因此l e f t和r i g h t中的元素可以独立排序,并且不必对l e f t和r i g h t的排序结果进行合并。m i d d l e中的元素被称为支点( p i v o t )。 应用举例3:路径问题 问题描述 分析 参考程序 应用举例4:距离最近的点对 问题描述: 给定n 个点(xi,yi)(1≤i≤n),要求找出其中距离最近的两个点。 假设在一片金属上钻n 个大小一样的洞,如果洞太近,金属可能会断。若知道任意两个洞的最小距离,可估计金属断裂的概率。这种最小距离问题实际上也就是距离最近的点对问题。 解法分析: 直接方法:通过检查所有的n(n- 1 ) / 2对点,并计算每一对点的距离,可以找出距离最近的一对点。这种方法所需要的时间为(n2 )。我们称这种方法为直接方法。 分治方法 If (n较小) then 用直接法寻找最近点对; else begin 将点集分成大致相等的两个部分A和B 确定A中最近的点对; 确定B中的最近点对; 确定一点在A中、另一点在B中的最近点对; 从上面得到的三对点中,找出距离最小的一对点; end;

文档评论(0)

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

1亿VIP精品文档

相关文档