第2章递归与分治策略 (2)优秀课件.ppt
《第2章递归与分治策略 (2)优秀课件.ppt》由会员分享,可在线阅读,更多相关《第2章递归与分治策略 (2)优秀课件.ppt(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第2章递归与分治策略(2)第1页,本讲稿共39页2算法设计与分析算法设计与分析 递归与分治递归与分治可分解性:复杂性随问题规模的减少而减少;可分解性:复杂性随问题规模的减少而减少;递归性:子问题具有相同的模式,因而可以用递归性:子问题具有相同的模式,因而可以用递归方法处理;递归方法处理;可归并性:子问题的解不是原问题的解时必须可归并性:子问题的解不是原问题的解时必须能把子问题的解归并成原问题的解能把子问题的解归并成原问题的解;独立性:子问题相互独立,没有交叉、重复。独立性:子问题相互独立,没有交叉、重复。分治策略的适用条件分治策略的适用条件分治策略的适用条件分治策略的适用条件第2页,本讲稿共3
2、9页3算法设计与分析算法设计与分析 递归与分治递归与分治如何分解?如何分解?大量实践中发现,在用分治法设计算法时,最好大量实践中发现,在用分治法设计算法时,最好使使子问题的规模大致相同子问题的规模大致相同。这种使子问题规模大。这种使子问题规模大致相等的做法是出自致相等的做法是出自一种一种平衡平衡(balancing)(balancing)子问题子问题的思想,它几乎总是比子问题规模不等的做法要的思想,它几乎总是比子问题规模不等的做法要好。好。子问题规模大致相同、平衡,这样最有效。通常子问题规模大致相同、平衡,这样最有效。通常 k=2.第3页,本讲稿共39页4算法设计与分析算法设计与分析 递归与分
3、治递归与分治 Divide-and-Conquer(P)if(|P|=n0)Adhoc(P);直接求解问题p divide P into smaller subinstances P1,P2,.,Pk;for(i=1;i 递归与分治递归与分治设问题P(n)分解成k个规模为n/m的子问题,阀值n0=1,求解P(1)的时间耗费为O(1).将P(n)分解及合并成P(n)的解的时间为f(n),则分治法解规模为n的问题的最坏时间复杂性函数T(n)满足:T(n)=算法的时间复杂性 Divide-and-Conquer(P)if(|P|=n0)Adhoc(P);divide P into smaller s
4、ubinstances P1,P2,.,Pk;for(i=1;i=k;i+)yi=Divide-and-Conquer(Pi);return Merge(yl,.,yk);f(n)kT(n/m)T(1)=O(1)T(n)=kT(n/m)+f(n)解得:适用问题大数相乘,矩阵乘法,快速富立叶变换,棋盘覆盖,排序,选择 等.O(1)第5页,本讲稿共39页 已知不重复且从小到大排列的已知不重复且从小到大排列的m个整数的数组个整数的数组A1.m,m=2K,K为正整数为正整数.对于给定的整数对于给定的整数c,要求找到一个下标要求找到一个下标i,使得使得Ai=c.找不到返回找不到返回0.function
5、search(c)i:=1;1 while Aic and i 递归与分治递归与分治 二分二分查找查找第6页,本讲稿共39页 算法1-2:二分查找例例题题1-1最坏情况Tmax(m)=O(logm)function b-search(c)L:=1;U:=m;found:=false;while not found and U=L do i:=(L+U)div2;if c=Ai then found:=trueelse if cAi then L:=i+1 else U:=i-1 if found then b-search:=1 else b-search:=0 7算法设计与分析算法设计与分析
6、 递归与分治递归与分治 二分二分查找查找第7页,本讲稿共39页8从无序的数组a0:n-1中寻找最大与最小元素方法一:找最大元素:n-1次比较 找最小元素:n-2次比较总计:2n-3次比较方法二(分治法)左右两部分分别求max1,min1和max2,min2 合成:fmax=max(max1,max2)fmin=min(min1,min2)寻找最大与最小元素寻找最大与最小元素算法设计与分析算法设计与分析 递归与分治递归与分治 寻找最大与最小元素寻找最大与最小元素第8页,本讲稿共39页9递归方程 0 n=1T(n)=1 n=2 T(n/2)+T(n/2)+2 n2T(n)=3n/2 2 比较次数优
7、于方法一。算法设计与分析算法设计与分析 递归与分治递归与分治 寻找最大与最小元素寻找最大与最小元素第9页,本讲稿共39页10算法设计与分析算法设计与分析 递归与分治递归与分治 大整数的乘法大整数的乘法通常,在分析算法的复杂性时,加法和乘法当作基本运算,即执通常,在分析算法的复杂性时,加法和乘法当作基本运算,即执行一次加法或乘法运算所需的计算时间当作一个仅取决于计算机行一次加法或乘法运算所需的计算时间当作一个仅取决于计算机硬件处理速度的常数。硬件处理速度的常数。这个假定仅在硬件能对整数直接表示和处理时才合理。然而,在这个假定仅在硬件能对整数直接表示和处理时才合理。然而,在处理很大整数时,硬件无法
8、直接表示和处理。而用浮点数来表示处理很大整数时,硬件无法直接表示和处理。而用浮点数来表示则只能近似值,计算结果中的有效数字也受到限制。若要精确地则只能近似值,计算结果中的有效数字也受到限制。若要精确地表示大整数并在计算结果中要求精确地得到所有位数上的数字,表示大整数并在计算结果中要求精确地得到所有位数上的数字,必须用软件方法来实现大整数的算术运算。必须用软件方法来实现大整数的算术运算。2.4 大整数的乘法算法算法问题问题:设设X,Y是两个是两个n位二进制数位二进制数,求求XY.第10页,本讲稿共39页11如何设计两个大整数的乘法运算的有效的算法?如何设计两个大整数的乘法运算的有效的算法?要求:
9、大整数超出要求:大整数超出longint表示范围,而浮点表示不精确。表示范围,而浮点表示不精确。假设:乘法时间远大于加减法、移位运算假设:乘法时间远大于加减法、移位运算将两个一位数的乘法或加法看作一步运算,那么,两个将两个一位数的乘法或加法看作一步运算,那么,两个N位数位数X*Y相乘,需要相乘,需要O(N2)时间时间算法设计与分析算法设计与分析 递归与分治递归与分治 大整数的乘法大整数的乘法分治算法思路分治算法思路:若两个若两个1位数相乘或相加看作位数相乘或相加看作1步运算步运算,按传统乘法需按传统乘法需O(n2)次运算次运算.将每个将每个n(n=2K)位的二进制整数分为位的二进制整数分为2段
10、段,每段的长为每段的长为n/2位位X=A2n/2+BY=C2n/2+D。第11页,本讲稿共39页T(1)=O(1)T(n)=3T(n/2)+O(n)12算法设计与分析算法设计与分析 递归与分治递归与分治 大整数的乘法大整数的乘法计算计算XY须须3次次n/2位整数的乘法位整数的乘法,6次加次加.减和减和2次移位次移位XY(A2n/2+B)(C2n/2+D)AC2n+(AD+CB)2n/2+BD T(n)=T(1)=O(1)T(n)=4T(n/2)+O(n)计算计算XY须须4次次n/2位整数的乘法位整数的乘法,3次不超过次不超过2n位的整数加法位的整数加法,2次移位次移位(乘乘2n和乘和乘2n/2
11、).XY的的T(n)满足满足解得解得T(n)=O(n2)T(n)=解得 T(n)=O(nlog3)没有改善改进:XYAC2n+(A-B)(D-C)+AC+BD2n/2+BD算法算法如果将大整数分成更多段,用更复杂的方式把它们组合起来,将有可能得到更优的算法。最终的,这个思想导致了快速傅利叶变换快速傅利叶变换(Fast Fourier Transform)的产生。该方法也可以看作是一个复杂的分治算法。第12页,本讲稿共39页13算法设计与分析算法设计与分析 递归与分治递归与分治 大整数的乘法大整数的乘法 S=SIGN(X)*SIGN(Y);X:=ABS(X);Y:=ABS(Y);if n=l t
12、hen if(X=1)and(Y=1)then return(S)else return(0)else A:=X的左边n/2位;B:=X的右边n/2位;C:=Y的左边n/2位;D:=Y的右边n/2位;m1:=MULT(A,C,n/2);m2:=MULT(A-B,D-C,n/2);m3:=MULT(B,D,n/2);S:=S*(m1*2n+(m1+m2+m3)*2n/2+m3);return(S)X,Y为2个小于2n的二进制整数,返回结果为X和Y的乘积XYfunction MULT(X,Y,n)大数相乘的分治递归算法大数相乘的分治递归算法二进制大整数乘法同样可应用于十进制大整数的乘法存放XY的符
13、号存放三个乘积算法算法第13页,本讲稿共39页142.5 2.5 矩阵相乘的矩阵相乘的StrassenStrassen法法算法设计与分析算法设计与分析 递归与分治递归与分治 矩阵相乘的矩阵相乘的StrassenStrassen法法求出矩阵求出矩阵C的的n2个元素所需的时间为个元素所需的时间为0(n3)。常规算法常规算法:设矩阵设矩阵A=(aij)n n,B=(bij)n n,C=A B=(cij)n n计算计算C共需共需n n2个乘法个乘法,n2(n-1)个加法个加法.T(n)=O(n3)分治法分治法1969年,年,Strassen采用了类似于在大整数乘法中用过的分治技术,采用了类似于在大整数
14、乘法中用过的分治技术,将计算将计算2个个n阶矩阵乘积所需的计算时间改进到阶矩阵乘积所需的计算时间改进到O(nlog7)=O(n2.81)。第14页,本讲稿共39页T(2)=O(1)T(n)=8T(n/2)+O(n2)15分治算法分治算法:划分划分A,B为四个为四个n/2(n=2K)阶方阵阶方阵,则则:C11=A11B11+A12B21C12=A11B11+A12B21C21=A11B11+A12B21C22=A11B11+A12B21若若n=2,可直接计算可直接计算C;若若n2,C需需8个个n/2阶方阵的乘法和阶方阵的乘法和4个加法个加法.T(n)=得得:T(n)=O(n3)算法设计与分析算法
15、设计与分析 递归与分治递归与分治 矩阵相乘的矩阵相乘的StrassenStrassen法法第15页,本讲稿共39页16改进C11=M5+M4-M2+M6C12=M1+M2C21=M3+M4C22=M5+M1-M3-M7M1=A11(B12-B21)M2=(A11+A12)B22M3=(A21+A22)B11M4=A22(B21-B11)M5=(A11+A22)(B11+B22)M6=(A12+A22)(B21+B22)M7=(A11-A21)(B11+B12)验证:C22=M5+M1-M3-M7 =(A11+A22)(B11+B22)+A11(B12-B21)-(A21+A22)B11-(A1
16、1-A21)(B11+B12)=A11B11+A11B22+A22B11+A22B22+A11B12 -A11B22-A21B11-A22B11-A11B11 -A11B12+A21B11+A21B12 =A21B12+A22B22算法设计与分析算法设计与分析 递归与分治递归与分治 矩阵相乘的矩阵相乘的StrassenStrassen法法第16页,本讲稿共39页procedure STRASSEN(n,A,B,C);if n=2 then MATRIX_MULTIPLY(A,B,C)else 将矩阵A和B分块;STRASSEN(n/2,A11,B12-B22,M1);STRASSEN(h/2,
17、A11+A12,B22,M2);STRASSEN(n/2,A21+A22,B11,M3);STRASSEN(n/2,A22,B21-B11,M4);STRASSEN(n/2,A11+A22,B11+B22,M5)STRASSEN(n/2,A12-A22,B21+B22,M6);STRASSEN(n/2,A11+A21,B11+B12,M7)C:=矩阵相乘Strassen算法算法算法17算法设计与分析算法设计与分析 递归与分治递归与分治 矩阵相乘的矩阵相乘的StrassenStrassen法法第17页,本讲稿共39页18算法设计与分析算法设计与分析 递归与分治递归与分治 矩阵相乘的矩阵相乘的St
18、rassenStrassen法法复杂度改进为:T(n)=O(Nlog7)O(N2.81)理论意义:突破了O(N3)界限实际应用问题:递归;占用空间多;对于非2k 阶方阵的处理最好的成果:O(N2.37)继续按2*2分解。能否达到O(N2)?Hopcroft和Kerr已经证明(1971),计算2个矩阵的乘积,7次乘法是必要的。因此,要想进一步改进矩阵乘法的时间复杂性,就不能再基于计算22矩阵的7次乘法这样的方法了。或许应当研究或矩阵的更好算法。T(n)=T(2)=O(1)T(n)=7T(n/2)+18(n/2)2 得:T(n)=O(nlog7)=O(n2.81)分析:第18页,本讲稿共39页(a
19、)(b)(c)(d)问题陈述问题陈述:在一个在一个2k 2k个方格组成的棋盘中个方格组成的棋盘中,恰有一方格残缺恰有一方格残缺,残缺方格的位置有残缺方格的位置有22k种。故对任何种。故对任何k0,残缺棋盘有残缺棋盘有22k种种.要要求用求用L型骨牌覆盖残缺棋盘上的所有方格且任何型骨牌覆盖残缺棋盘上的所有方格且任何2个个L型骨牌不型骨牌不得重叠覆盖得重叠覆盖。192k 2k的棋盘覆盖中,用到的棋盘覆盖中,用到的骨牌数为的骨牌数为(4k-1)/32.6 2.6 棋盘覆盖棋盘覆盖算法设计与分析算法设计与分析 递归与分治递归与分治 棋盘覆盖(a)(b)(c)(d)11 122 233 34 4455
20、5第19页,本讲稿共39页20分治算法:当k0时,将2k 2k棋盘分割为4个2k-1 2k-1子棋盘 残缺方格必位于4个子棋盘之一其余3个子棋盘中无残缺方格为此将剩余3棋盘转化为残缺棋盘.用一个L型骨牌覆盖这3个较小棋盘的结合处.这3个子棋盘上被L型骨牌覆盖的方格就成为该棋盘上的残缺方格,原问题转化为4个较小规模的棋盘覆盖问题。递归地使用这种分割,直至棋盘简化为1 1棋盘.算法设计与分析算法设计与分析 递归与分治递归与分治 棋盘覆盖第20页,本讲稿共39页21算法分析:设T(k)为覆盖2k 2k残缺棋盘的时间,当k=0时覆盖它需要常数时间O(1)当k0时,测试哪个子棋盘残缺以及形成3个残缺子棋
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第2章递归与分治策略 2优秀课件 递归 分治 策略 优秀 课件
限制150内