算法 分治法课件.ppt
《算法 分治法课件.ppt》由会员分享,可在线阅读,更多相关《算法 分治法课件.ppt(56页珍藏版)》请在三一办公上搜索。
1、2023/1/17,分治法,第4章 分治法,4.1 概 述,4.2 排序问题中的分治法,4.3 组合问题中的分治法,4.4 几何问题中的分治法,分治法是最著名的算法设计技术。,1/56,2023/1/17,分治法,4.1 概 述,4.1.1 分治法的设计思想,4.1.2 数字旋转方阵,2/56,2023/1/17,分治法,将一个难以直接解决的大问题,划分成一些规模较小的子问题,分别求解各个子问题,再合并子问题的解得到原问题的解。,4.1.1 分治法的设计思想,如果子问题的规模仍然不够小,可继续分解下去。,3/56,2023/1/17,分治法,分治法的求解过程:分-治-合,(1)划分:把规模为n
2、的原问题划分为k个规模较小的子问题,并尽量使这k个子问题的规模大致相同。,(2)求解子问题:各子问题的解法与原问题的解法通常是相同的,可以用递归的方法求解各个子问题。,(3)合并:把各个子问题的解合并起来,分治算法的有效性很大程度上依赖于合并的实现。,4/56,2023/1/17,分治法,2.独立子问题:各子问题之间相互独立。,1.平衡子问题:最好使子问题的规模大致相同。,启发式规则:,5/56,2023/1/17,分治法,分治法的典型情况,6/56,2023/1/17,分治法,例:计算an,应用分治技术得到如下计算方法:,不是所有的分治法都比简单的蛮力法更有效。,分析时间性能,7/56,20
3、23/1/17,分治法,4.1.2 数字旋转方阵,问题:输出NN(1N10)数字旋转方阵。,20 19 18 17 1621 32 31 30 1522 33 36 29 1423 34 35 28 1324 25 26 27 127 8 9 10 11,66的旋转方阵,8/56,2023/1/17,分治法,4.2 排序问题中的分治法,4.2.1 归并排序,4.2.2 快速排序,9,2023/1/17,分治法,4.3.1 归并排序,二路归并排序的分治策略是:(1)划分:将待排序序列r1,r2,rn划分为两个长度相等的子序列r1,rn/2和rn/21,rn;(2)求解子问题:分别对这两个子序列进
4、行排序,得到两个有序子序列;(3)合并:将这两个有序子序列合并成一个有序序列。,10/56,2023/1/17,分治法,举例:8 3 2 6 7 1 5 4,11/56,2023/1/17,分治法,12/56,2023/1/17,分治法,二路归并排序的合并步的时间复杂性为O(n),所以,二路归并排序算法存在如下递推式:,可得二路归并排序的时间代价是O(nlog2n)。二路归并排序在合并过程中需要与原始记录序列同样数量的存储空间,因此其空间复杂性为O(n)。,13/56,2023/1/17,分治法,14/56,2023/1/17,分治法,4.3.2 快速排序,(2)求解子问题:分别对划分后的每一
5、个子序列递归处理;(3)合并:由于对子序列r1 ri-1和ri+1 rn的排序是就地进行的,所以合并不需要执行任何操作。,快速排序的分治策略是:(1)划分:选定一个记录作为轴值,以轴值为基准将整个序列划分为两个子序列;,15/56,2023/1/17,分治法,归并排序按照记录在序列中的位置对序列进行划分,快速排序按照记录的值对序列进行划分。,16/56,2023/1/17,分治法,以第一个记录作为轴值,对待排序序列进行划分的过程为:(1)初始化:取第一个记录作为基准,设置两个参数i,j;,(2)右侧扫描过程:,(3)左侧扫描过程:,(4)重复(2)(3)步,直到i与j指向同一位置,即基准记录最
6、终的位置。,17,2023/1/17,分治法,一次划分示例,18,2023/1/17,分治法,19,2023/1/17,分治法,以轴值为基准将待排序序列划分为两个子序列后,对每一个子序列分别递归进行排序。,13,27,50,38,49,55,j,i,i,j,13,65,27,50,38,49,55,65,20,2023/1/17,分治法,21,2023/1/17,分治法,T(n)=2 T(n/2)n=2(2T(n/4)n/2)n4T(n/4)2n=4(2T(n/8)n/4)2n8T(n/8)3n=nT(1)nlog2nO(nlog2n)因此,时间复杂度为O(nlog2n)。,最好情况:每次划分
7、后把待划分区间划分为长度相等的两个子序列。在具有n个记录的序列中,一次划分需要对整个待划分序列扫描一遍,则所需时间为O(n)。设T(n)是对n个记录的序列进行排序的时间,则有:,22,2023/1/17,分治法,因此,时间复杂度为O(n2)。,最坏情况:待排序记录序列正序或逆序。此时,必须经过n-1次递归调用,而且第i趟划分需要经过n-i次关键码的比较,因此,总的比较次数为:,23,2023/1/17,分治法,平均情况:设基准记录的关键码第k小(1kn),则有:,这是快速排序的平均时间性能,可以用归纳法证明,其数量级也为O(nlog2n)。,快速排序的空间复杂性如何?,24/56,2023/1
8、/17,分治法,4.3 组合问题中的分治法,4.3.1 最大子段和问题,4.3.2 棋盘覆盖问题,补充:循环赛日程安排问题,25/56,2023/1/17,分治法,给定由n个整数组成的序列(a1,a2,an),最大子段和问题要求该序列形如 的最大值(1ijn)。当序列中所有整数均为负整数时,其最大子段和为0。如,序列(-20,11,-4,13,-5,-2)的最大子段和为:,4.3.1 最大子段和问题,26/56,2023/1/17,分治法,最大子段和问题的分治策略是:(1)划分:按照平衡子问题的原则,将序列(a1,a2,an)划分成长度相同的两个子序列(a1,a)和(a 1,an),则:,先考
9、虑最大子段和问题的简单算法,27/56,2023/1/17,分治法,a1,an的最大子段和a1,a 的最大子段和;a1,an的最大子段和a 1,an的最大子段和;a1,an的最大子段和,且,(2)求解子问题:对于划分阶段的情况和可递归求解,情况需要分别计算,,,则s1+s2为情况的最大子段和。,(3)合并:比较在划分阶段的三种情况下的最大子段和,取三者之中的较大者为原问题的解。,28,2023/1/17,分治法,29,2023/1/17,分治法,30,2023/1/17,分治法,s1=0;lefts=0;/以下对应情况,先求解s1 for(i=center;i=left;i-)lefts+=a
10、i;if(leftss1)s1=lefts;s2=0;rights=0;/再求解s2 for(j=center+1;js2)s2=rights;sum=s1+s2;/计算情况的最大子段和 if(sumleftsum)sum=leftsum;/合并,在sum、leftsum和rightsum中取较大者 if(sumrightsum)sum=rightsum;return sum;,31/56,2023/1/17,分治法,算法的时间性能:对应划分得到的情况和,需要分别递归求解,对应情况,两个并列for循环的时间复杂性是O(n),所以,存在如下递推式:,从而可得算法4.7的时间复杂性为O(nlog2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 分治法课件 分治 课件
链接地址:https://www.31ppt.com/p-2138100.html