网站大量收购独家精品文档,联系QQ:2885784924

分治思想入门详解.ppt

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

给你一个装有1 6个硬币的袋子。1 6个硬币中有一个是伪造的,并且那个伪造的硬币比真的硬币要轻一些。你的任务是找出这个伪造的硬币。为了帮助你完成这一任务,将提供一台可用来比较两组硬币重量的仪器,利用这台仪器,可以知道两组硬币的重量是否相同。 你将如何完成呢? 例4、残缺棋盘问题 残缺棋盘是一个有2k×2k 个方格的棋盘,其中恰有一个方格残缺。残缺棋盘的问题要求用L型的格板覆盖残缺棋盘。在此覆盖中,两个三格板不能重叠,三格板不能覆盖残缺方格,但必须覆盖其他所有的方格。 Input 输入数据的第一行包含了一个整数n ≤ 9。第二行包含两个整数x和y,这两个数描述了被挖去的格子的位置 (1 ≤?x,?y?≤ 2n)。x是那个格子所在的行,y表示列。左上角的那个格子表示为 (1, 1)。 Output 你的程序需要输出2n行,每行2n个数字。在被挖去的那个格子处应该输出0,而其他位置应该是1到 (22n?? 1) / 3,代表了覆盖这个格子的图形的编号。很明显,同一个图形应该使用同一个编号。如果不可能,那么输出“-1”。 Sample 1、由于只有挖掉一个点,可以将整个棋牌均分为四块,并且在中间挖去一个L形,将四块中的一个空格对准被挖掉空格的那一个区域。如图。 2、四个区域中的方块数量都是相等的15块。此后,只要对每个区域都继续按照同样的规则继续分,即可生成。 一条街道安装无线网络,需要放置M个路由器。整条街道上一共有N户居民,分布在一条直线上,每一户居民必须被至少一台路由器覆盖到。现在的问题是所有路由器的覆盖半径是一样的,我们希望用覆盖半径尽可能小的路由器来完成任务,因为这样可以节省成本。 Input Format 输入文件第一行包含两个整数M和N,以下N行每行一个整数Hi表示该户居民在街道上相对于某个点的坐标。 Output Format 输出文件仅包含一个数,表示最小的覆盖半径,保留一位小数。 Sample Input 2 3 1 3 10 Sample Output 1.0 (在2,10位置上放置) 简述 在数轴上给出N个点,求最小的长度L,使得可以用M条长度为2*L的线段覆盖所有的点。 如何求线段长度呢? 1)枚举,数据太大不可能; 2)因为只有一个值,又知道值的范围,能否二分求该值呢? 如右图,设线段的两端 为q与p,二分首选长度 到mid点,太短改变q值 (线段长度为MID+继续 二分q,p的长度), 太长改变p值(线段长度 mid),如此….., 即q、p值相向逼近,直到 p-q在一定的误差范围即求 出了所需的线段长度。 程序框架 for i:=1 to n do readln(s[i]);{读入数据} sort(1,n); q:=0;p:=s[n]-s[1];{二分上下界的初始化} while true do begin mid:=(q+p)div 2;{取上下界的中点,用于二分比较} if p-q=1 then break;{精度满足则退出.注意:输入只有整数,所以精度要求是这样} if try(mid)m then q:=mid else p:=mid;{刷新上下界} end; if m=n then res:=0 else res:=p/2;{显然M大等于N的时候,长度为0即可,取长的一端} 枚举判断线段覆盖情况 function try(t:longint):longint;{进行模拟,考虑长度为T时候,返回需要的线段数} var h,e,i,j:longint; begin e:=1;h:=1; for i:=2 to n do if s[i]-s[h]t then{线段长仅小于h,i两点距离} begin inc(e); h:=i; end; exit(e); end; 分治后合并过程 分治法的适用条件 分治法所能解决的问题一般具有以下几个特征: 该问题的规模缩小到一定的程度就可以容易地解决; 该问题可以分解为若干个规模较小的相同问题,即该问题具有子结构性质 利用该问题分解出的子问题的解可以合并为该问题的解; 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。 分治法: 麦森数 第一问是很简单的,只需要求一个对数而已,数学原理:十进制正整数n的位数为int(log10(n))+1。所以2^P-1的位数int(log10(

文档评论(0)

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

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

1亿VIP精品文档

相关文档