分治法与二分答案课件.ppt

  1. 1、本文档共54页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
分治法与二分答案课件

分治法与二分答案 常州一中 秦珂钰 问题导入    如果给你一个装有16个硬币的袋子,其中有一个是伪造的,并且那个伪造硬币的重量和真硬币的重量不同。你能不能用最少的比较次数找出这个伪造的硬币?为了帮助你完成这一任务,将提供一台可用来比较两组硬币重量的仪器,利用这台仪器,可以知道两组硬币的重量是否相同。 初步想法    常规的解决方法是先将这些硬币分成两个一组,每一次只称一组硬币,如果运气好的话只要称1次就可以找到,最多称8次就可以找出那枚硬币。这种直接寻找的方法存在着相当大的投机性。这种方法适用于硬币数量少的情况,在硬币数量多的情况下就成为一件费时费力又需要运气的事。 新的思路 试着改变一下方法:如果我们将一组硬币分成两小组,将原来设计的一次比较两枚硬币变为一次比较两组硬币,我们会发现通过一次比较后,完全可以舍弃全部是真币的一组硬币,选取与原有问题一致的另一半进行下一步的比较,这样问题的规模就明显缩小,而且每一次比较的规模都是成倍减少。 方法解读 归纳结论 根据以上分析,我们可以得到以下的结论:   1、参与比较的硬币数量越多,使用该方法来实现就越快,而且投机性大大减少;   2、解决方法关键在于能将大问题分割成若干小问题; 3、小问题与原有问题是完全类似的。   通常我们将这种大化小的设计策略称之为分治法,即“分而治之”的意思。 分治法是将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。侧重点在于能各个击破。分治法在设计检索、分类算法或某些速算法中很有效的。最常用的分治法是二分法、归并法、快速分类法等。   分治法是程序设计中常见的解决方法,其特点主要有以下两个:   (1)对大问题的解决可以分解成对若干小问题的解决;   (2)每个小问题出现的情况又与大问题出现的情况是一致的。   在算法实现中,我们通常采用递归来实现。当然有的问题在分析时用的是递归的思路,在具体实现时只用递推的方法,这样做的目的是简化运行步骤,提高运行效率。   分治法在每一层递归上都要有三个步骤:   (1)分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题;   (2)解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题;   (3)合并:将各个子问题的解合并为原问题的解。 无处不在的二分思想 生活中,不同类型的事物间具有一些区别特征,这些区别特征总是以只具有“是/否”、“有/无”等两种对立属性的“二元偶分组”形式存在,因为这样可以最方便最快捷地确定出一个元素。 就例如猜数游戏。想一个数字由你来猜,告诉你你的猜测是大了还是小了。 这样一来,我们就可以不断的缩小答案区间,减少枚举的规模,最终得到答案。 二分思想应用的举例 猜数字 单调函数找零点 快速排序 找第K大数 二分查找 …… 二分查找 有序数列中寻找某一个数 每一次查找的时间复杂度为logN 二分答案 顾名思义,即利用二分枚举,判断这个值是否满足要求,不断逼近答案,最终得到答案。 适合使用二分答案的题目必须满足以下特征: 1、候选答案必须在一个明确的区间内; 2、候选答案必须是离散的(如果答案是连续的,那么在一定的精度范围内可以转化为离散问题); 3、候选答案在区间内某种属性依次排列,各个类别不能混杂(即满足单调性)。 二分答案 在解决二分答案的题目时,通常需要分析出答案的单调性和有界性,并且需要设计出正确高效的验证算法。 由于题目的千变万化,贪心、动态规划、模拟、图论等都有可能成为验证算法。 因此,在近年的各类比赛中,二分答案的题目常常出现。 例1:求方程的根 例6:MASON 问题描述: 形如2P-1的素数称为麦森数,这时P一定也是个素数。但反过来不一定,即如果P是个素数,2P-1不一定也是素数。到1998年底,人们已找到了37个麦森数。最大的一个是P=3021377,它有909526位。 任务:从文件中输入P(1000P3100000),计算2P-1的位数和最后500位数字(用十进制高精度数表示)。 穆护意意烈聘轻橙慷牡娠缨肾欺涟姿贯嘻锥伪形站陀端打防叫脏碌岿蹈夯分治法与二分答案课件分治法与二分答案课件 例6:MASON 输入:整数P(1000P3100000)。 输出:第一行:十进制高精度数2P-1的位数; 第2-11行:十进制高精度数2P-1的最后500位数字 (每行输出50位,共输出10行,不足500位时高位补0); 不必验证2P-1与P是否为素数。 mason.in 1279 mason.out 386 00000000000

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档