noip基础算法——贪心和分治

noip基础算法——贪心和分治

ID:26130107

大小:1.67 MB

页数:114页

时间:2018-11-24

noip基础算法——贪心和分治_第1页
noip基础算法——贪心和分治_第2页
noip基础算法——贪心和分治_第3页
noip基础算法——贪心和分治_第4页
noip基础算法——贪心和分治_第5页
noip基础算法——贪心和分治_第6页
noip基础算法——贪心和分治_第7页
noip基础算法——贪心和分治_第8页
noip基础算法——贪心和分治_第9页
noip基础算法——贪心和分治_第10页
资源描述:

《noip基础算法——贪心和分治》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、NOIP基础算法——分治与贪心第五部分分治策略一、分治思想分治法,又叫分治策略,顾名思义,分而治之。它的基本思想:对于难以直接解决的规模较大的问题,把它分解成若干个能直接解决的相互独立的子问题,递归求出各子问题的解,再合并子问题的解,得到原问题的解。通过减少问题的规模,逐步求解,能够明显降低解决问题的复杂度。二、分治法的适用条件能使用分治法解决的问题,它们一般具备以下几个特征:①该问题可分解成若干相互独立、规模较小的相同子问题;②子问题缩小到一定的程度就能轻易得到解;③子问题的解合并后,能得到原问

2、题的解;分治法在信息学竞赛中应用非常广泛,使用分治策略能生成一些常用的算法和数据结构,如快排、最优二叉树、线段树等;还可以直接使用分治策略,解决一些规模很大、无法直接下手的问题。三、分治的三步骤①分解:将要解决的问题分解成若干个规模较小的同类子问题;②解决:当子问题划分得足够小时,求解出子问题的解。③合并:将子问题的解逐层合并成原问题的解。分治算法设计过程图在划分问题时,可以采用递归策略,把一个大问题逐步分解成规模较小的子问题,直至可以直接求出子问题的解;再将子问题逐层合并,返回到顶层,得到原问题

3、的解。根据分治策略的划分原则,把原问题划分成多少个子问题才合适呢?各个子问题的规模应该多大才合适呢?一般来说,每次划分成2个子问题,每个子问题的规模差不多最合适。合并解时要因题而异,有些问题递归分解完能直接得到原问题的解,有些问题需逐层合并,得到原问题的解。四、分治的框架结构procedureDivide()beginif(问题不可分)then//解决begin直接求解;返回问题的解;endelsebegin对原问题进行分治;//分解递归对每一个分治的部分进行求解;//解决归并整个问题,得出全问题

4、的解;//合并endend;五、分治的典型应用1、求最大值和最小值2、求方程的根3、二分查找4、归并排序5、快速幂6、求解线性递推关系7、棋盘覆盖问题8、循环日程表问题9、寻找最近点对1、求最大值和最小值例题1:给n个数,求它们之中最大值和最小值,要求比较次数尽量小。分析:假设数据个数为n,存放在数组a[1..n]中。可以直接进行比较:minn:=a[1];maxx:=a[1];fori:=2tondoifa[i]>maxxthenmaxx:=a[i];elseifa[i]

5、n:=a[i];使用这一算法,比较次数为2(n-1)。若n=10,则比较18次。【方法2】分治策略划分:把n个数均分为两半。即:划分点为d=(r1+r2)/2,两个区间为[r1,d]和[d+1,r2]。递归求解:求左半的最小值min1和最大值max1以及右半最小值min2和最大值max2。合并:max1与max2比较得到所有数的最大值为maxx;min1与min2比较得到所有数的最小值为minn。procedurepd(r1,r2:integer;varmaxx,minn:integer)begi

6、nvarmax1,min1,max2,min2,d:integer;ifr1=r2thenbeginmaxx:=x[r1];minn:=x[r1];endelseifr2=r1+1thenbeginifx[r2]>x[r1]thenbeginmaxx:=x[r2];minn:=x[r1];endelsebeginmaxx:=x[r1];minn:=x[r2];endendelsebegind:=(r1+r2)/2;pd(r1,d,max1,min1);pd(d+1,r2,max2,min2);if

7、max1>max2thenmaxx:=max1;elsemaxx:=max2;ifmin1=1。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格

8、),并精确到小数点后4位。【文件输入】输入仅一行,有四个数,依次为a、b、c、d【文件输出】输出也只有一行,即三个根(从小到大输出)【样例输入】1-5-420【样例输入】-2.002.005.00分析如果精确到小数点后两位,可用简单枚举法:将x从-100.00到100.00(步长0.01)逐一枚举,得到20000个f(x),取其值与0最接近的三个f(x),对应的x即为答案。而题目已改成精度为小数点后4位,枚举算法时间复杂度将达不到要求。直接使用求根公式,极为复杂。加上本题的提示给我

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。