算法设计思想回顾(递归和分治、动态规划、贪心算法、回溯法、分支限界ppt课件.ppt
《算法设计思想回顾(递归和分治、动态规划、贪心算法、回溯法、分支限界ppt课件.ppt》由会员分享,可在线阅读,更多相关《算法设计思想回顾(递归和分治、动态规划、贪心算法、回溯法、分支限界ppt课件.ppt(39页珍藏版)》请在三一办公上搜索。
1、主讲人: 吕敏Email: Spring 2012 ,USTC,算法基础,2022/11/13,2,算法设计复习,内容提要:算法设计思想回顾(递归和分治、动态规划、贪心算法、回溯法、分支限界法、随机算法) 经典例子讲解,算法设计策略,已学过的算法设计策略:递归和分治动态规划贪心算法 回溯法 分支限界法 随机算法,2022/11/13,3,4,基本思想:把一个规模大的问题划分为规模较小的子问题,然后分而治之,最后合并子问题的解得到原问题的解。步骤:分割原问题:求解子问题:合并子问题的解为原问题的解。在分治法中,子问题一般是相互独立的,因此,经常通过递归调用算法来求解子问题。,Sch1-4 分治法
2、,5,Sch1-4 分治法,分治法所能解决的问题一般具有以下几个特征:该问题的规模缩小到一定的程度就可以容易地解决;该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质利用该问题分解出的子问题的解可以合并为该问题的解;该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。,这条特征涉及到分治法的效率,如果各子问题是不独立的,则分治法要做许多不必要的工作,重复地解公共的子问题,此时虽然也可用分治法,但一般用动态规划较好。,6,例1:最近点对问题为了使问题易于理解和分析,先来考虑一维的情形。此时,S中的n个点退化为x轴上的n个实数 x1,x2,xn。最接近点对即为
3、这n个实数中相差最小的2个实数。假设我们用x轴上某个点m将S划分为2个子集S1和S2 ,基于平衡子问题的思想,用S中各点坐标的中位数来作分割点。递归地在S1和S2上找出其最接近点对p1,p2和q1,q2,并设d=min|p1-p2|,|q1-q2|,S中的最接近点对或者是p1,p2,或者是q1,q2,或者是某个p3,q3,其中p3S1且q3S2。能否在线性时间内找到p3,q3?,Sch1-4 分治法,7,Sch1-4 分治法,如果S的最接近点对是p3,q3,即|p3-q3|d,则p3和q3两者与m的距离不超过d,即p3(m-d,m,q3(m,m+d。由于在S1中,每个长度为d的半闭区间至多包含
4、一个点(否则必有两点距离小于d),并且m是S1和S2的分割点,因此(m-d,m中至多包含S中的一个点。由图可以看出,如果(m-d,m中有S中的点,则此点就是S1中最大点。因此,我们用线性时间就能找到区间(m-d,m和(m,m+d中所有点,即p3和q3。从而我们用线性时间就可以将S1的解和S2的解合并成为S的解。,8,Sch1-4 分治法,选取一垂直线l:x=m来作为分割直线。其中m为S中各点x坐标的中位数。由此将S分割为S1和S2。递归地在S1和S2上找出其最小距离d1和d2,并设d=mind1,d2,S中的最接近点对或者是d,或者是某个p,q,其中pP1且qP2。能否在线性时间内找到p,q?
5、,9,Sch1-4 分治法,考虑P1中任意一点p,它若与P2中的点q构成最接近点对的候选者,则必有distance(p,q)d。满足这个条件的P2中的点一定落在一个d2d的矩形R中由d的意义可知,P2中任何2个S中的点的距离都不小于d。由此可以推出矩形R中最多只有6个S中的点。因此,在分治法的合并步骤中最多只需要检查6n/2=3n个候选者,能否在线性时间内找到p,q?,证明:将矩形R的长为2d的边3等分,将它的长为d的边2等分,由此导出6个(d/2)(2d/3)的矩形。若矩形R中有多于6个S中的点,则由鸽舍原理易知至少有一个(d/2)(2d/3)的小矩形中有2个以上S中的点。设u,v是位于同一
6、小矩形中的2个点,则distance(u,v)d。这与d的意义相矛盾。,10,为了确切地知道要检查哪6个点,可以将p和P2中所有S2的点投影到垂直线l上。由于能与p点一起构成最接近点对候选者的S2中点一定在矩形R中,所以它们在直线l上的投影点距p在l上投影点的距离小于d。由上面的分析可知,这种投影点最多只有6个。因此,若将P1和P2中所有S中点按其y坐标排好序,则对P1中所有点,对排好序的点列作一次扫描,就可以找出所有最接近点对的候选者。对P1中每一点最多只要检查P2中排好序的相继6个点。,Sch1-4 分治法,11,Sch1-4 分治法,double cpair2(S) n=|S|; if
7、(n m2、d1=cpair2(S1); d2=cpair2(S2);3、dm=min(d1,d2);,4、设P1是S1中距垂直分割线l的距离在dm之内的所有点组成的集合; P2是S2中距分割线l的距离在dm之内所有点组成的集合; 将P1和P2中点依其y坐标值排序; 并设X和Y是相应的已排好序的点列;5、通过扫描X以及对于X中每个点检查Y中与其距离在dm之内的所有点(最多6个)可以完成合并;当X中的扫描指针逐次向上移动时,Y中的扫描指针可在宽为2dm的区间内移动; 设dl是按这种扫描方式找到的点对间的最小距离;6、d=min(dm,dl); return d;,时间复杂度:T(n)=O(nlo
8、gn),12,基本思想: 将待求解问题分解成若干个子问题,但是经分解得到的子问题往往不是互相独立的。不同子问题的数目常常只有多项式量级。在用分治法求解时,有些子问题被重复计算了许多次。通过保存已解决的子问题的答案,而在需要时再找出已求得的答案,就可以避免大量重复计算,从而得到多项式时间算法。基本步骤:找出最优解的性质,并刻划其结构特征。递归地定义最优值。以自底向上的方式计算出最优值。根据计算最优值时得到的信息,构造最优解。,Sch1-4 动态规划,13,基本要素:最优子结构性质:原问题的最优解包含着子问题的最优解,可以通过反证法来证明问题具有最优子结构性质。重叠子问题:递归算法求解问题时,每次
9、产生的子问题并不总是新问题,有些子问题被反复计算多次。对每一个子问题只解一次,而后将其解保存在一个表格中,当再次需要解此子问题时,只是简单地用常数时间查看一下结果。 问题的关键在于构造子问题空间。一个经验性规则就是,尽量保持这个空间简单,然后在需要时再扩充它。,Sch1-4 动态规划,14,例子2:凸多边形最优三角剖分问题用多边形顶点的逆时针序列表示凸多边形,即P=v0,v1,vn-1表示具有n条边的凸多边形。若vi与vj是多边形上不相邻的2个顶点,则线段vivj称为多边形的一条弦。弦将多边形分割成2个多边形vi,vi+1,vj和vj,vj+1,vi。多边形的三角剖分是将多边形分割成互不相交的
10、三角形的弦的集合T。在凸多边形P的一个三角剖分T中,各弦互不相交,且弦数已达到最大,即P的任一不在T中的弦必与T中某一弦相交。在一个有n个顶点的凸多边形的三角剖分中,恰好有n-3条弦和n-2个三角形。,Sch1-4 动态规划,Sch1-4 动态规划,凸多边形最优三角剖分的问题是:给定凸多边形P,以及定义在由多边形的边和弦组成的三角形上的权函数w。要求确定该凸多边形的三角剖分,使得即该三角剖分中诸三角形上权之和为最小。 可以定义三角形上各种各样的权函数,如定义:(vivjvk)=|vivj|+|vivk|+|vkvj| 其中,|vivj|是点vi到vj的欧氏距离。相应于此权函数的最优三角剖分即为
11、最小弦长三角剖分,16,三角形剖分的结构及其相关问题一个表达式的完全加括号方式相应于一棵完全二叉树,称为表达式的语法树。例如,完全加括号的矩阵连乘积(A1(A2A3)(A4(A5A6)所相应的语法树如图 (a)所示。凸多边形v0,v1,vn-1的三角剖分也可以用语法树表示。例如,图 (b)中凸多边形的三角剖分可用图 (a)所示的语法树表示。 矩阵连乘积中的每个矩阵Ai对应于凸(n+1)边形中的一条边vi-1vi。三角剖分中的一条弦vivj,ij,对应于矩阵连乘积Ai+1:j。,Sch1-4动态规划,17,最优子结构性质:凸多边形的最优三角剖分问题有最优子结构性质。证明:事实上,若凸(n+1)边
12、形P=v0,v1,vn-1的最优三角剖分T包含三角形v0vkvn,1kn-1,则T的权为3个部分权的和:三角形v0vkvn的权,子多边形v0,v1,vk和vk,vk+1,vn的权之和。可以断言,由T所确定的这2个子多边形的三角剖分也是最优的。因为若有v0,v1,vk或vk,vk+1,vn的更小权的三角剖分将导致T不是最优三角剖分的矛盾。,Sch1-4 动态规划法,18,递归结构:定义tij,1ijn为凸子多边形vi-1,vi,vj的最优三角剖分所对应的权函数值,即其最优值。为方便起见,设退化的多边形vi-1,vi具有权值0。据此定义,要计算的凸(n+1)边形P的最优权值为t1n。tij的值可以
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 设计 思想 回顾 递归 分治 动态 规划 贪心 回溯 分支 限界 ppt 课件
链接地址:https://www.31ppt.com/p-1357509.html