- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第1 4章分而治之算法
君主和殖民者们所成功运用的分而治之策略也可以运用到高效率的计算机算法
的设计过程中。本章将首先介绍怎样在算法设计领域应用这一古老的策略,然后将
利用这一策略解决如下问题:最小最大问题、矩阵乘法、残缺棋盘、排序、选择和
一个计算几何问题——找出二维空间中距离最近的两个点。
本章给出了用来分析分而治之算法复杂性的数学方法,并通过推导最小最大问题和
排序问题的复杂性下限来证明分而治之算法对于求解这两种问题是最优的(因为算
法的复杂性与下限一致)。
14.1 算法思想
分而治之方法与软件设计的模块化方法非常相似。为了解决一个大的问题,可以:1)
把它分成两个或多个更小的问题; 2) 分别解决每个小问题; 3) 把各小问题的解
答组合起来,即可得到原问题的解答。小问题通常与原问题相似,可以递归地使用
分而治之策略来解决。
例14-1 [找出伪币] 给你一个装有1 6个硬币的袋子。1 6个硬币中有一个是伪造的,
并且那个伪造的硬币比真的硬币要轻一些。你的任务是找出这个伪造的硬币。为了
帮助你完成这一任务,将提供一台可用来比较两组硬币重量的仪器,利用这台仪器,
可以知道两组硬币的重量是否相同。比较硬币1与硬币2的重量。假如硬币1比硬币2
轻,则硬币1是伪造的;假如硬币2比硬币1轻,则硬币2是伪造的。这样就完成了任
务。假如两硬币重量相等,则比较硬币3和硬币4。同样,假如有一个硬币轻一些,
则寻找伪币的任务完成。假如两硬币重量相等,则继续比较硬币5和硬币6。按照这
种方式,可以最多通过8次比较来判断伪币的存在并找出这一伪币。
另外一种方法就是利用分而治之方法。假如把1 6硬币的例子看成一个大的问题。
第一步,把这一问题分成两个小问题。随机选择8个硬币作为第一组称为A组,剩下
的8个硬币作为第二组称为B组。这样,就把1 6个硬币的问题分成两个8硬币的问题
来解决。第二步,判断A和B组中是否有伪币。可以利用仪器来比较A组硬币和B组硬
币的重量。假如两组硬币重量相等,则可以判断伪币不存在。假如两组硬币重量不
相等,则存在伪币,并且可以判断它位于较轻的那一组硬币中。最后,在第三步中,
用第二步的结果得出原先1 6个硬币问题的答案。若仅仅判断硬币是否存在,则第三
步非常简单。无论A组还是B组中有伪币,都可以推断这1 6个硬币中存在伪币。因此,
仅仅通过一次重量的比较,就可以判断伪币是否存在。现在假设需要识别出这一伪
币。把两个或三个硬币的情况作为不可再分的小问题。注意如果只有一个硬币,那
么不能判断出它是否就是伪币。在一个小问题中,通过将一个硬币分别与其他两个
硬币比较,最多比较两次就可以找到伪币。这样,1 6硬币的问题就被分为两个8硬
币(A组和B组)的问题。通过比较这两组硬币的重量,可以判断伪币是否存在。如
果没有伪币,则算法终止。否则,继续划分这两组硬币来寻找伪币。假设B是轻的那
一组,因此再把它分成两组,每组有4个硬币。称其中一组为B1,另一组为B2。比较
这两组,肯定有一组轻一些。如果B1轻,则伪币在B1中,再将B1又分成两组,每组
有两个硬币,称其中一组为B1a,另一组为B1b。比较这两组,可以得到一个较轻的
组。由于这个组只有两个硬币,因此不必再细分。比较组中两个硬币的重量,可以
立即知道哪一个硬币轻一些。较轻的硬币就是所要找的伪币。
1
例14-2 [金块问题] 有一个老板有一袋金块。每个月将有两名雇员会因其优异的表
现分别被奖励一个金块。按规矩,排名第一的雇员将得到袋中最重的金块,排名第
二的雇员将得到袋中最轻的金块。根据这种方式,除非有新的金块加入袋中,否则
第一名雇员所得到的金块总是比第二名雇员所得到的金块重。如果有新的金块周期
性的加入袋中,则每个月都必须找出最轻和最重的金块。假设有一台比较重量的仪
器,我们希望用最少的比较次数找出最轻和最重的金块。
假设袋中有n 个金块。可以用函数M a x (程序1 - 3 1)通过n-1次比较找到
最重的金块。找到最重的金块后,可以从余下的n-1个金块中用类似的方法通过n-2
次比较找出最轻的金块。这样,比较的总次数为2n-3。程序2 - 2 6和2 - 2 7是另
外两种方法,前者需要进行2n-2次比较,后者最多需要进行2n-2次比较。下面用分
而治之方法对这个问题进行求解。当n很小时,比如说, n≤2,识别出最重和最轻
的金块,一次比较就足够了。当n 较大时(n>2),第一步,把这袋金块平分成两
个小袋A和B。第二步,分别找出在A和B中最重和最轻的金块。设A
您可能关注的文档
最近下载
- 羊水栓塞护理措施.pptx VIP
- 星球版八年级上册地理第四章《第一节 因地制宜发展农业》教案.docx VIP
- 2025年粤东西北教师全员轮训心得体会2篇.doc VIP
- TCRHA-成人床旁心电监测护理规程.pdf VIP
- 中联W6015-8A塔吊说明书操作手册.pdf VIP
- 过滤材料和部件市场前景预测与技术创新策略研究报告.pdf
- 新生儿甲状腺功能降低.pptx
- 8.27-安徽A10联盟2025届高三8月底开学摸底考试题及答案1号卷·A10联盟2025届高三上学期8月底开学摸底考物理答案.pdf VIP
- 华为HCIE-CloudServiceSolutionsArchitect云服务练习试题.doc
- 8.27-安徽A10联盟2025届高三8月底开学摸底考试题及答案A10联盟2025届高三上学期8月底开学摸底考英语答案 1.docx VIP
文档评论(0)