分治算法PPT讲稿.ppt
《分治算法PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《分治算法PPT讲稿.ppt(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、分治算法第1页,共16页,编辑于2022年,星期五例:找出伪币例:找出伪币给你一个装有给你一个装有n枚硬币的袋子。枚硬币的袋子。n枚硬币中有一个枚硬币中有一个是伪造的,并且那个伪造的硬币比真的硬币要轻是伪造的,并且那个伪造的硬币比真的硬币要轻一些。你的任务是找出这枚伪造的硬币。一些。你的任务是找出这枚伪造的硬币。为了帮助你完成这一任务,将提供一台可用来比为了帮助你完成这一任务,将提供一台可用来比较两组硬币重量的仪器,比如天平。利用这台仪较两组硬币重量的仪器,比如天平。利用这台仪器,可以知道两组硬币的重量是否相同。器,可以知道两组硬币的重量是否相同。对对n=2,3,4,5,6,7,8,9?N=8
2、0?第2页,共16页,编辑于2022年,星期五分治思想分治思想【分治思想分治思想分治思想分治思想】:分治就是:分治就是:分治就是:分治就是“分而治之分而治之分而治之分而治之”的意思,其实质就是将原问的意思,其实质就是将原问的意思,其实质就是将原问的意思,其实质就是将原问题分成题分成题分成题分成n n个规模较小而结构与原问题相似的子问题;然后递归地解这些个规模较小而结构与原问题相似的子问题;然后递归地解这些个规模较小而结构与原问题相似的子问题;然后递归地解这些个规模较小而结构与原问题相似的子问题;然后递归地解这些子问题,最后合并其结果就得到原问题的解。当子问题,最后合并其结果就得到原问题的解。当
3、子问题,最后合并其结果就得到原问题的解。当子问题,最后合并其结果就得到原问题的解。当n=2n=2时的分治法又称二时的分治法又称二时的分治法又称二时的分治法又称二分法。分法。分法。分法。分治步骤:分治步骤:分治步骤:分治步骤:1.1.分解分解分解分解(Divide)(Divide):将原问题分成一系列子问题。:将原问题分成一系列子问题。:将原问题分成一系列子问题。:将原问题分成一系列子问题。2.2.解决解决解决解决(Conquer)(Conquer):递归地解各子问题。若子问题足够小,则:递归地解各子问题。若子问题足够小,则:递归地解各子问题。若子问题足够小,则:递归地解各子问题。若子问题足够小
4、,则可直接求解。可直接求解。可直接求解。可直接求解。3.3.合并合并合并合并(combine)(combine);将子问题的结果合并成原问题的解。;将子问题的结果合并成原问题的解。;将子问题的结果合并成原问题的解。;将子问题的结果合并成原问题的解。第3页,共16页,编辑于2022年,星期五分治思想分治思想问题问题S问题问题S问题问题SS的解的解问题问题S1问题问题S2问题问题Si问题问题SnS1的解的解S2的解的解Si的解的解Sn的解的解问题的分解问题的分解子集解的合并子集解的合并子问题求子问题求解解第4页,共16页,编辑于2022年,星期五分治策略的解题思路分治策略的解题思路 if(问题不可
5、分问题不可分)直接求解;直接求解;返回问题的解;返回问题的解;else 对原问题进行分治;对原问题进行分治;递归对每一个分治的部分求解递归对每一个分治的部分求解;归并整个问题,得出全问题的解;归并整个问题,得出全问题的解;第5页,共16页,编辑于2022年,星期五应用举例应用举例:一元三次方程求解一元三次方程求解【问题描述问题描述】:有形如:有形如:ax3+bx2+cx+d=0这样的一个一元三次这样的一个一元三次方程。给出该方程中各项的系数方程。给出该方程中各项的系数(a,b,c,d均为实数均为实数),并约定该,并约定该方程存在三个不同实根方程存在三个不同实根(根的范围在根的范围在-100至至
6、100之间之间),且根与根之差,且根与根之差的绝对值的绝对值=1。要求由小到大依次在同一行输出这三个实根。要求由小到大依次在同一行输出这三个实根(根与根根与根之间留有空格之间留有空格),并精确到小数点后,并精确到小数点后4位。位。提示:记方程提示:记方程f(x)=ax3+bx2+cx+d,若存在,若存在2个数个数x1和和x2,且,且x1x2,f(x1)*f(x2)0,则在,则在(x1,x2)之间一定有一个根。之间一定有一个根。【样例输入样例输入】:1 -5 -4 20【样例输出样例输出】:-2.00 2.00 5.00第6页,共16页,编辑于2022年,星期五分分 析析如果精确到小数点后两位,
7、可用简单的枚举法:将如果精确到小数点后两位,可用简单的枚举法:将x从从-100.00 到到100.00(步长(步长0.01)逐一枚举,得到逐一枚举,得到20000个个 f(x),取其值与,取其值与0最接近的三个最接近的三个f(x),对应的,对应的x即为答即为答案。而题目已改成精度为小数点后案。而题目已改成精度为小数点后4位,枚举算法时间位,枚举算法时间复杂度将达不到要求。复杂度将达不到要求。直接使用求根公式,极为复杂。加上本题的提示给直接使用求根公式,极为复杂。加上本题的提示给我们以启迪:采用二分法逐渐缩小根的范围,从而我们以启迪:采用二分法逐渐缩小根的范围,从而得到根的某精度的数值得到根的某
8、精度的数值第7页,共16页,编辑于2022年,星期五分分 析析u当已知区间当已知区间(a,b)内有一个根时,用二分法求根,若区间内有一个根时,用二分法求根,若区间(a,b)内有根,内有根,则必有则必有f(a)*f(b)b或或f(a+b)/2)=0,则可确定根为,则可确定根为(a+b)/2并退出并退出过程;过程;u(2).若若f(a)*f(a+b)/2)0,则必然有则必然有f(a+b)/2)*f(b)0,根在根在(a+b)/2,b)中中,对此区间重复该过程。对此区间重复该过程。u执行完毕执行完毕,就可以得到精确到就可以得到精确到0.0001的根。的根。第8页,共16页,编辑于2022年,星期五应
9、用举例应用举例-二分查找二分查找 在一个从小到大排序好的表里搜索关键码在一个从小到大排序好的表里搜索关键码在一个从小到大排序好的表里搜索关键码在一个从小到大排序好的表里搜索关键码x x 顺序查找:最坏情况下要比较所有元素顺序查找:最坏情况下要比较所有元素顺序查找:最坏情况下要比较所有元素顺序查找:最坏情况下要比较所有元素 二分查找:只需要比较二分查找:只需要比较二分查找:只需要比较二分查找:只需要比较log2nlog2n个元素个元素个元素个元素 Divide:Divide:检查中间元素检查中间元素检查中间元素检查中间元素 Conquer:Conquer:递归在其中一个区间内搜索递归在其中一个区
10、间内搜索递归在其中一个区间内搜索递归在其中一个区间内搜索 Combine:Combine:平凡的平凡的平凡的平凡的2.2.2.2.折半查找折半查找折半查找折半查找:是在一列升序(或降序)的数中查找目的数。将这一列数存储:是在一列升序(或降序)的数中查找目的数。将这一列数存储:是在一列升序(或降序)的数中查找目的数。将这一列数存储:是在一列升序(或降序)的数中查找目的数。将这一列数存储在数组在数组在数组在数组a a a a中中中中,目的是寻找目的是寻找目的是寻找目的是寻找x,x,x,x,用用用用toptoptoptop指向低端指向低端指向低端指向低端,bot,bot,bot,bot指向高端指向高
11、端指向高端指向高端,mid,mid,mid,mid指向中间指向中间指向中间指向中间,然后进然后进然后进然后进行以下三种比较:行以下三种比较:行以下三种比较:行以下三种比较:(1 1 1 1)若)若)若)若x=amid,x=amid,x=amid,x=amid,则表示找到;则表示找到;则表示找到;则表示找到;(2 2 2 2)若)若)若)若xamid,xamid,xamid,xamid,xamid,xamid,xamid,则进行下一步查找则进行下一步查找则进行下一步查找则进行下一步查找,top:=mid-1;bot,top:=mid-1;bot,top:=mid-1;bot,top:=mid-1
12、;bot不变不变不变不变,假如有已按由小到大排好序的假如有已按由小到大排好序的假如有已按由小到大排好序的假如有已按由小到大排好序的9 9 9 9个数个数个数个数,a1-a9,a1-a9,a1-a9,a1-a9 其值分别为:其值分别为:其值分别为:其值分别为:1 3 5 7 9 11 13 15 171 3 5 7 9 11 13 15 171 3 5 7 9 11 13 15 171 3 5 7 9 11 13 15 17第9页,共16页,编辑于2022年,星期五int erfind(int low,int high,int x)int erfind(int low,int high,int
13、x)/在在在在alowalow与与与与ahighahigh之间查找是否有值为之间查找是否有值为之间查找是否有值为之间查找是否有值为x x的元素的元素的元素的元素 int mid;int mid;while(low=high)while(low=high)mid=(low+high)/2;mid=(low+high)/2;if(amid=x)return mid;/if(amid=x)return mid;/查找成功查找成功查找成功查找成功 if(x amid)high=mid1;if(x amid)high=mid1;else low=mid+1;else low=mid+1;return-1
14、;/return-1;/查找不成功查找不成功查找不成功查找不成功 代码代码第10页,共16页,编辑于2022年,星期五应用举例应用举例-归并排序归并排序 problem problem:给:给:给:给n n个数个数个数个数,要求从小到大排序要求从小到大排序要求从小到大排序要求从小到大排序 divide divide:将:将:将:将n n个元素分成各含个元素分成各含个元素分成各含个元素分成各含n/2n/2个元素的子序列个元素的子序列个元素的子序列个元素的子序列;conquer conquer:用合并排序法对这两个子序列递归地排序:用合并排序法对这两个子序列递归地排序:用合并排序法对这两个子序列递
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 分治 算法 PPT 讲稿
限制150内