欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > PPT文档下载
    分享到微信 分享到微博 分享到QQ空间

    算法设计与分析-王红梅-第二版-第4章-分治法.ppt

    • 资源ID:30853286       资源大小:2.67MB        全文页数:85页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    算法设计与分析-王红梅-第二版-第4章-分治法.ppt

    1、第4章 分治法算法设计与分析算法设计与分析算法设计与分析算法设计与分析本科本科本科本科生课程生课程生课程生课程Design and Analysis of AlgorithmDesign and Analysis of Algorithm海南大学信息科学技术学院海南大学信息科学技术学院College of Information Science and College of Information Science and Technology,Hainan UniversityTechnology,Hainan University2024/3/22024/3/2Divide and Conq

    2、uer MethodDivide and Conquer Method2 2本章要点本章要点4.1 概概 述述 4.2 排序问题中的分治法排序问题中的分治法4.3 组合问题中的分治法组合问题中的分治法4.4 几何问题中的分治法几何问题中的分治法阅读材料阅读材料 递归函数的执行过程递归函数的执行过程2024/3/22024/3/2Divide and Conquer MethodDivide and Conquer Method3 3教学重点教学重点分治法的设计思想,各种经典问题的分治思想分治法的设计思想,各种经典问题的分治思想教学难点教学难点几何问题的分治算法几何问题的分治算法教学内容教学内容

    3、及目标及目标知识点知识点教学要求教学要求了解了解理解理解掌握掌握熟练掌熟练掌握握分治法设计思想分治法设计思想归并排序和快速排序归并排序和快速排序最大子段和问题最大子段和问题棋盘覆盖问题棋盘覆盖问题最近对问题最近对问题凸包问题凸包问题学习目标学习目标2024/3/22024/3/2Divide and Conquer MethodDivide and Conquer Method4 44.1.1分治法的设计思想分治法的设计思想4.1.2分治法的求解过程分治法的求解过程概概 述述2024/3/22024/3/2Divide and Conquer MethodDivide and Conquer

    4、Method5 5 将一个难以直接解决的大问题,划分成将一个难以直接解决的大问题,划分成一些规模较小的一些规模较小的子问题子问题,以各个击破,以各个击破,分而治之分而治之。更一般地说,将要求解的。更一般地说,将要求解的原问题原问题划分成划分成k个较小规模的子问题个较小规模的子问题,对这,对这k个子问题分别求个子问题分别求解。如果子问题的规模仍然不够小,则再将每个子问题划分解。如果子问题的规模仍然不够小,则再将每个子问题划分为为k个规模更小的子问题,如此分解下去,个规模更小的子问题,如此分解下去,直到问题规模足够直到问题规模足够小,很容易求出其解为止小,很容易求出其解为止,再将子问题的解合并为一

    5、个更大,再将子问题的解合并为一个更大规模的问题的解,自底向上逐步求出原问题的解。规模的问题的解,自底向上逐步求出原问题的解。分治法的设计思想:分治法的设计思想:概述概述-分治法思想分治法思想2024/3/22024/3/2Divide and Conquer MethodDivide and Conquer Method6 62.独立子问题:独立子问题:各子问题之间相互独立,这涉及到分治法的各子问题之间相互独立,这涉及到分治法的效率,如果各子问题效率,如果各子问题不是独立的不是独立的,则,则分治法需要重复地解公分治法需要重复地解公共的子问题共的子问题。1.平衡子问题:平衡子问题:最好使子问题的

    6、规模大致相同。也就是将一最好使子问题的规模大致相同。也就是将一个问题个问题划分成大小相等的划分成大小相等的k个子问题个子问题(通常(通常k2、4,),这),这种使子问题规模大致相等的做法是种使子问题规模大致相等的做法是出自一种平衡出自一种平衡(Balancing)子问题的思想)子问题的思想,它几乎,它几乎总是比总是比子问题规模不等子问题规模不等的做法要好。的做法要好。启发式规则:启发式规则:概述概述-分治法思想分治法思想2024/3/22024/3/2Divide and Conquer MethodDivide and Conquer Method7 7子问题子问题1的规模是的规模是n/2子

    7、问题子问题1的解的解子问题子问题2的解的解子问题子问题2的规模是的规模是n/2原问题的解原问题的解原问题原问题的规模是的规模是n分治法的典型情况分治法的典型情况概述概述-分治法思想分治法思想2024/3/22024/3/2Divide and Conquer MethodDivide and Conquer Method8 8一般来说,分治法的求解过程由以下三个阶段组成:一般来说,分治法的求解过程由以下三个阶段组成:(1 1)划划分分:既既然然是是分分治治,当当然然要要把把规规模模为为n n 的的原原问问题题划划分分为为k k 个个规规模模较较小小的的子子问问题题,并并尽尽量量使使这这k k

    8、个个子子问问题题的的规规模大致相同。模大致相同。(2 2)求求解解子子问问题题:各各子子问问题题的的解解法法与与原原问问题题的的解解法法通通常常是是相相同同的的,可可以以用用递递归归的的方方法法求求解解各各个个子子问问题题,有有时时递递归归处理也可以用循环来实现。处理也可以用循环来实现。(3 3)合并:合并:把各个子问题的解合并起来,合并的代价因把各个子问题的解合并起来,合并的代价因情况不同有很大差异,分治算法的情况不同有很大差异,分治算法的有效性很大程度上依赖有效性很大程度上依赖于合并的实现于合并的实现。概述概述-分治法的求解过程分治法的求解过程2024/3/22024/3/2Divide

    9、and Conquer MethodDivide and Conquer Method9 9概述概述-分治法的求解过程分治法的求解过程分治法的一般过程分治法的一般过程 1DivideConquer(P)(P)/求解规模为求解规模为n的问题的问题P23if(P(P的规模足够小的规模足够小)直接求解直接求解P;分解为分解为k个子问题个子问题P1,P2,Pk;4for(i=1;i*=1122naanaannn如果如果如果如果2024/3/22024/3/2Divide and Conquer MethodDivide and Conquer Method11114.1.1分治法的设计思想分治法的设计

    10、思想4.1.2一个简单的例子一个简单的例子数字旋转方阵数字旋转方阵概概 述述2024/3/22024/3/2Divide and Conquer MethodDivide and Conquer Method1212问题问题输出如图输出如图4.3(a)所示所示N*N(1N10)的数字旋转方阵)的数字旋转方阵思路思路用二维数组表示方阵,从外层向里层填数,如图用二维数组表示方阵,从外层向里层填数,如图(b)所示,所示,将每一层的填数过程分为将每一层的填数过程分为ABCD四个区域。每填一层四个区域。每填一层size减减2,终止条件是终止条件是size1。数字旋转方阵数字旋转方阵2024/3/2202

    11、4/3/2Divide and Conquer MethodDivide and Conquer Method1313算法算法4.1:数字旋转方阵:数字旋转方阵Full输入:当前层左上角要填的数字输入:当前层左上角要填的数字number,左上角的坐标,左上角的坐标begin,方阵的阶数,方阵的阶数size输出:数字旋转方阵输出:数字旋转方阵1.如果如果size=0,则算法结束;,则算法结束;2.如果如果size=1,则,则databeginbegin=number,算法结束;,算法结束;3.初始化行、列下标初始化行、列下标i=begin,j=begin;4.重复下述操作重复下述操作size-1

    12、次,填写区域次,填写区域A1.Dataij=number;number+;i+;数字旋转方阵数字旋转方阵2024/3/22024/3/2Divide and Conquer MethodDivide and Conquer Method14145.重复下述操作重复下述操作size-1次,填写区域次,填写区域B1.Dataij=number;number+;j+;6.重复下述操作重复下述操作size-1次,填写区域次,填写区域C1.Dataij=number;number+;i-;7.重复下述操作重复下述操作size-1次,填写区域次,填写区域D1.Dataij=number;number+;j

    13、-;8.递归调用函数递归调用函数Full在在size-2阶方阵中左上角阶方阵中左上角begin+1处从数字处从数字number开始填数开始填数数字旋转方阵数字旋转方阵2024/3/22024/3/2Divide and Conquer MethodDivide and Conquer Method1515算法分析算法分析填写填写n阶方阵,四个区域由阶方阵,四个区域由4个循环实现,每个循环个循环实现,每个循环均执行均执行n-1,然后执行递归调用,填写,然后执行递归调用,填写n-2阶方阵。递推式:阶方阵。递推式:数字旋转方阵数字旋转方阵 =T(n-2)+4(n-1)当当n=0时时0nT1)(当当n

    14、=1时时当当n1时时设设n为偶数,用扩展递归技术解此递推式,得为偶数,用扩展递归技术解此递推式,得T(n)=T(n-2)+4(n-1)=T(n-4)+4(n-3)+4(n-1)=T(0)+4(n-5)+4(n-3)+4(n-1)=O(n2)2024/3/22024/3/2Divide and Conquer MethodDivide and Conquer Method1616本章要点本章要点4.1 概概 述述 4.2 排序问题中的分治法排序问题中的分治法4.3 组合问题中的分治法组合问题中的分治法4.4 几何问题中的分治法几何问题中的分治法阅读材料阅读材料 递归函数的执行过程递归函数的执行过

    15、程2024/3/22024/3/2Divide and Conquer MethodDivide and Conquer Method1717排序问题中的分治法排序问题中的分治法4.2.1 4.2.1 归并排序归并排序4.2.2 4.2.2 快速排序快速排序2024/3/22024/3/2Divide and Conquer MethodDivide and Conquer Method1818n归并排序归并排序二路归并排序的分治策略是:二路归并排序的分治策略是:(1)划划分分:将将待待排排序序序序列列r1,r2,rn划划分分为为两两个个长长度相等的子序列度相等的子序列r1,rn/2和和rn/

    16、21,rn;(2)求求解解子子问问题题:分分别别对对这这两两个个子子序序列列进进行行排排序序,得到两个有序子序列;得到两个有序子序列;(3)合合并并:将将这这两两个个有有序序子子序序列列合合并并成成一一个个有有序序序序列。列。4.2.1 4.2.1 归并排序归并排序2024/3/22024/3/2Divide and Conquer MethodDivide and Conquer Method1919 r1 rn/2rn/21rn划分划分r1rn/2rn/21rn递归处理递归处理r1rn/2rn/21r n合并解合并解4.2.1 4.2.1 归并排序归并排序2024/3/22024/3/2D

    17、ivide and Conquer MethodDivide and Conquer Method2020想想法法首首先先将将序序列列划划分分为为两两个个子子序序列列,如如子子序序列列长长度度为为1,则则划划分分结结束束,否否则则继继续续执执行行划划分分,结结果果将将具具有有n个个待待排排序序的的记记录录序序列列划划分分为为n个个长长度度为为1的的有有序序子子序序列列;然然后后两两两两合合并并,得得到到n/2个个长长度度为为2的的有有序序子子序序列列,再再进进行行两两两两合合并并直直到到得得到一个长度为到一个长度为n的有序序列。的有序序列。4.2.1 4.2.1 归并排序归并排序2024/3/

    18、22024/3/2Divide and Conquer MethodDivide and Conquer Method2121算法算法4.3归并排序归并排序voidMergeSort(intr,intr1,ints,intt)/r原序列数组,原序列数组,r1归并后序列数组归并后序列数组if(s=t)r1s=rs;elsem=(s+t)/2;Mergesort(r,r1,s,m);/归并排序前半个子序列归并排序前半个子序列Mergesort(r,r1,m+1,t);/归并排序后半个子序列归并排序后半个子序列Merge(r1,r,s,m,t);/合并两个已排序的子序列合并两个已排序的子序列4.2.

    19、1 4.2.1 归并排序归并排序rs,rm rm+1,rt2024/3/22024/3/2Divide and Conquer MethodDivide and Conquer Method2222算法算法4.4合并有序子序列合并有序子序列voidMerge(intr,intr1,ints,intm,intt)/i,j分别指向两个待合并的有序子序列,分别指向两个待合并的有序子序列,k指向最终有序序列的当前记录指向最终有序序列的当前记录i=s;j=m+1;k=s;while(i=m&j=t)if(ri=rj)r1k+=ri+;/取取ri和和rj中较小者放入中较小者放入r1kelser1k+=rj

    20、+;if(i=m)while(i=m)/若第一个子序列没处理完,则进行收尾处理若第一个子序列没处理完,则进行收尾处理r1k+=ri+;elsewhile(j+=2)2(221)(nnnTnnT4.2.1 4.2.1 归并排序归并排序2024/3/22024/3/2Divide and Conquer MethodDivide and Conquer Method2424(2)求解子问题:求解子问题:分别对分别对划分后的每一个子序列递归划分后的每一个子序列递归处理;处理;(3)合并:合并:由于对子序列由于对子序列r1ri-1和和ri+1rn的排序是的排序是就地进行的,所以合并不需就地进行的,所以

    21、合并不需要执行任何操作。要执行任何操作。n快速排序的分治策略快速排序的分治策略(1)划划分分:选选定定一一个个记记录录作作为为轴轴值值,以以轴轴值值为为基基准准将将整整个个序序列列划划分分为为两两个个子子序序列列r1ri-1和和ri+1rn,前前一一个个子子序序列列中中记记录录的的值值均均小小于于或或等等于于轴轴值值,后后一一个个子子序序列列中中记记录录的的值值均均大大于于或或等等于于轴值轴值;4.2.2 4.2.2 快速排序快速排序r1ri-1 ri ri+1rn 均均ri 轴值轴值均均ri 位于最终位置位于最终位置2024/3/22024/3/2Divide and Conquer Met

    22、hodDivide and Conquer Method2525以第一个记录为轴值(可随机),对待排序序列进行划分的以第一个记录为轴值(可随机),对待排序序列进行划分的过程过程:(1)初初始始化化:取取第第一一个个记记录录作作为为基基准准,设设置置两两个个参参数数i,j分分别别用用来来指指示示将将要要与与基基准准记记录录进进行行比比较较的的左左侧侧记记录录位位置置和和右右侧侧记记录录位位置置,也就是也就是本次划分的区间本次划分的区间;(2)右右侧侧扫扫描描过过程程:将将基基准准记记录录与与j指指向向的的记记录录进进行行比比较较,如如果果j指指向向记记录录的的关关键键码码大大,则则j-,即即前前

    23、移移一一个个记记录录位位置置。重重复复右右侧侧扫扫描描过过程程,直直到到右右侧侧的的记记录录小小(即即反反序序),若若ij,则则将将基基准准记记录录与与j指向的记录进行交换指向的记录进行交换;(3)左左侧侧扫扫描描过过程程:将将基基准准记记录录与与i指指向向的的记记录录进进行行比比较较,如如果果i指指向向记记录录的的关关键键码码小小,则则i+,即即后后移移一一个个记记录录位位置置。重重复复左左侧侧扫扫描描过过程程,直直到到左左侧侧的的记记录录大大(即即反反序序),若若ij,则则将将基基准准记记录与录与i指向的记录交换指向的记录交换;4.2.2 4.2.2 快速排序快速排序2024/3/2202

    24、4/3/2Divide and Conquer MethodDivide and Conquer Method2626(4)重重复复(2)(3)步步,直直到到i与与j指指向向同同一一位位置置,即即基基准准记记录最终的位置。录最终的位置。4.2.2 4.2.2 快速排序快速排序一次划分示例一次划分示例一次划分示例一次划分示例:(1 1)i=1,j=7i=1,j=7,r1r1为基准记录为基准记录为基准记录为基准记录;(2 2)rirj?j-:rirj?i+:rirj?i+:rirj/rirj/左侧扫描左侧扫描左侧扫描左侧扫描(4 4)i=j?ifi=j,theni=j?ifi=j,then第一次划

    25、分基准记录位置找到第一次划分基准记录位置找到第一次划分基准记录位置找到第一次划分基准记录位置找到2024/3/22024/3/2Divide and Conquer MethodDivide and Conquer Method27271313656527275050383849495555jijj1313656527275050383849495555jiii1313656527275050383849495555ijjj一一一一次次次次划划划划分分分分示示示示例例例例2024/3/22024/3/2Divide and Conquer MethodDivide and Conquer Me

    26、thod2828算法算法4.5一次划分一次划分intPartition(intr,intfirst,intend)i=first;j=end;/初始化初始化while(ij)while(ij&ri=rj)j-;/右侧扫描右侧扫描if(ij)rirj;/将较小记录交换到前面将较小记录交换到前面i+;while(ij&ri=rj)i+;/左侧扫描左侧扫描if(ij)rjri;/将较大记录交换到后面将较大记录交换到后面j-;retutni;/i为轴值记录的最终位置为轴值记录的最终位置4.2.2 4.2.2 快速排序快速排序2024/3/22024/3/2Divide and Conquer Meth

    27、odDivide and Conquer Method2929以以轴轴值值(如如此此处处为为轴轴值值:38)为为基基准准将将待待排排序序序序列列划划分分为为两两个个子子序序列列后后,对对每每一一个个子子序序列列分分别别递递归归进进行行排序。排序。131327275050383849495555jiij131365652727505038384949555565654.2.2 4.2.2 快速排序快速排序2024/3/22024/3/2Divide and Conquer MethodDivide and Conquer Method3030算法算法4.6快速排序快速排序 void QuickS

    28、ort(int r,int first,int end)if(first0)sum=aleft;elsesum=0;elsecenter=(left+right)/2;/划分划分leftsum=MaxSum(a,left,center);/对应情况对应情况,递归求解,递归求解rightsum=MaxSum(a,center+1,right);/对应情况对应情况,递归求解,递归求解最大子段和问题最大子段和问题2024/3/22024/3/2Divide and Conquer MethodDivide and Conquer Method4141s1=0;lefts=0;/以下对应情况以下对应情

    29、况,先求解,先求解s1for(i=center;i=left;i-)lefts+=ai;if(leftss1)s1=lefts;s2=0;rights=0;/再求解再求解s2for(j=center+1;js2)s2=rights;sum=s1+s2;/计算情况计算情况的最大子段和的最大子段和if(sumleftsum)sum=leftsum;/合并,在合并,在sum、leftsum和和rightsum中取较大者中取较大者if(sum0时,可将时,可将2k2k的棋盘划分为的棋盘划分为4个个2k-12k-1的子棋盘,的子棋盘,这样划分后,由于这样划分后,由于原棋盘只有一个特殊方格原棋盘只有一个特

    30、殊方格,所以,这,所以,这4个个子棋盘中只有一个子子棋盘中只有一个子棋盘包含该特殊方格棋盘包含该特殊方格,其余,其余3个子棋盘个子棋盘中没有特殊方格。为了将这中没有特殊方格。为了将这3个没有特殊方格的子棋盘转化个没有特殊方格的子棋盘转化为特殊棋盘,以便采用递归方法求解,为特殊棋盘,以便采用递归方法求解,可以用一个可以用一个L型骨牌型骨牌覆盖这覆盖这3个较小棋盘的会合处个较小棋盘的会合处,从而将原问题转化为,从而将原问题转化为4个较个较小规模的棋盘覆盖问题。递归地使用这种划分策略,直至小规模的棋盘覆盖问题。递归地使用这种划分策略,直至将棋盘分割为将棋盘分割为11的子棋盘。的子棋盘。棋盘覆盖问题棋

    31、盘覆盖问题2024/3/22024/3/2Divide and Conquer MethodDivide and Conquer Method46462k-12k-12k-12k-12k-12k-12k-12k-1(a)棋盘分割棋盘分割(b)构造相同子问题构造相同子问题棋盘覆盖问题棋盘覆盖问题2024/3/22024/3/2Divide and Conquer MethodDivide and Conquer Method4747下面讨论棋盘覆盖问题中数据结构的设计。下面讨论棋盘覆盖问题中数据结构的设计。(1)棋盘:棋盘:可以用一个二维数组可以用一个二维数组boardsizesize表示一个棋

    32、盘,表示一个棋盘,其中,其中,size=2k。为了在递归处理的过程中使用同一个棋盘,将。为了在递归处理的过程中使用同一个棋盘,将数组数组board设为全局变量设为全局变量;(2)子棋盘:子棋盘:整个棋盘用二维数组整个棋盘用二维数组boardsizesize表示,其中表示,其中的子棋盘由棋盘左上角的下标的子棋盘由棋盘左上角的下标tr、tc和和棋盘大小棋盘大小s表示;表示;(3)特殊方格:特殊方格:用用boarddrdc表示特殊方格,表示特殊方格,dr和和dc是该特是该特殊方格在二维数组殊方格在二维数组board中的下标中的下标;(4)L型骨牌:型骨牌:一个一个2k2k的棋盘中有一个的棋盘中有一个

    33、特殊方格特殊方格,所以,所以,用到用到L型骨牌的个数型骨牌的个数为为(4k-1)/3,将所有,将所有L型骨牌从型骨牌从1开始连续开始连续编号,用一个全局变量编号,用一个全局变量t表示。表示。棋盘覆盖问题棋盘覆盖问题2024/3/22024/3/2Divide and Conquer MethodDivide and Conquer Method4848dcdrtrtcsize棋盘覆盖问题中的数据结构棋盘覆盖问题中的数据结构棋盘覆盖问题棋盘覆盖问题2024/3/22024/3/2Divide and Conquer MethodDivide and Conquer Method4949算法算法4.8棋盘覆盖棋盘覆盖voidChessBoard(inttr,inttc,intdr,intdc,intsize)/tr和和tc是子棋盘左上角的下标,是子棋盘左上角的下标,dr和和dc是特殊方格的下标


    注意事项

    本文(算法设计与分析-王红梅-第二版-第4章-分治法.ppt)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开