【教学课件】第2章递归与分治.ppt
《【教学课件】第2章递归与分治.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第2章递归与分治.ppt(122页珍藏版)》请在三一办公上搜索。
1、 2005,第2章 递归与分治策略,最通用的算法设计技术学习要点:理解递归的概念。掌握设计有效算法的分治策略。通过典型的范例学习分治策略设计技巧。,2,2.1 递归的概念,例1:阶乘函数 阶乘函数可递归地定义为:,注意:(1)边界条件与递归方程是递归函数的二个要素,递归函数只有具备了这两个要素,才能在有限次计算后得出结果。(2)非递归定义:,3,2.1 递归的概念,例2:Fibonacci数列问题引入裴波那契(Fibonacci leonardo,约1170-1250)是意大利著名数学家在他的著作算盘书中许多有趣的问题,最富成功的问题是著名的“兔子繁殖问题”:如果每对兔子每月繁殖一对子兔,而子
2、兔在出生后第二个月就有生殖能力,试问一对兔子一年能繁殖多少对兔子?问题分析,4,2.1 递归的概念,数列的特点(1)数列的增长速度(2)自然科学中的若干实例(3)构造一个新数列,5,定义:,2.1 递归的概念,6,2.1 递归的概念,如何求解?解法1:0(0.618n)int fibonacci(int n)if(n=0)|(n=1)return n;return fibonacci(n-1)+fibonacci(n-2);解法2:0(n)解法3:0(logn),7,2.1 递归的概念,思考:楼梯问题有一楼梯共有n阶,上楼可以一步上一阶,也可以一步上两阶。编一个程序,计算共有多少种不同的走法?
3、,8,例3 Ackerman函数 当一个函数及它的一个变量是由函数自身定义时,称这个函数是双递归函数。Ackerman函数A(n,m)定义如下:,2.1 递归的概念,9,2.1 递归的概念,Ackerman函数A(n,0)n+2A(n,1)2nA(n,2)2n。A(n,4)的增长速度非常快,以至于没有适当的数学式子来表示这一函数。,10,2.1 递归的概念,例4 排列问题设计一个递归算法生成n个元素r1,r2,rn的全排列。设R=r1,r2,rn是要进行排列的n个元素,Ri=R-ri。集合X中元素的全排列记为perm(X),(ri)perm(X)表示在全排列perm(X)的每一个排列前加上前缀
4、得到的排列。,11,2.1 递归的概念,R的全排列可归纳定义如下:当n=1时,perm(R)=(r),其中r是集合R中唯一的元素;当n1时,perm(R)由:(r1)perm(R1)(r2)perm(R2)(rn)perm(Rn)构成。参考算法:,12,2.1 递归的概念,例5 整数划分问题将一个正整数n表示成形如下式的一系列正整数的和,称为n的一个划分。形如:nn1n2nk其中:(ni1,i1,2,k,k1)且 nn1n2nk 1,13,2.1 递归的概念,例如:整数6的分划数有11种:6;5+1;4+2,4+1+1;3+3,3+2+1,3+1+1+1;2+2+2,2+2+1+1,2+1+1
5、+1+1;1+1+1+1+1+1;,14,2.1 递归的概念,分析:将最大加数n1不大于m的划分个数记作q(n,m)(1)q(n,1)=1,n1;(2)q(n,m)=q(n,n),mn;最大加数n1实际上不能大于n。因此,q(1,m)=1。(3)q(n,n)=1+q(n,n-1);正整数n的划分由n1=n的划分和n1 n-1的划分组成。(4)q(n,m)=q(n,m-1)+q(n-m,m),nm1;正整数n的最大加数n1不大于m的划分由n1=m的划分和n1 m-1 的划分组成。,15,而:正整数n的划分数p(n)=q(n,n)。,2.1 递归的概念,因此:q(n,m)的递归定义如下,16,2.
6、1 递归的概念,例6 Hanoi塔问题问题描述:,17,问题分析:,2.1 递归的概念,Hanoi(n,A,B,C),圆盘数 源柱 辅助柱 目标柱,18,=,+,+,2.1 递归的概念,19,递归求解void hanoi(int n,int a,int b,int c)if(n 0)hanoi(n-1,a,c,b);move(a,b);hanoi(n-1,c,b,a);递归函数的运行轨迹,2.1 递归的概念,20,Hanio(3,A,B,C),Hanio(2,A,C,B),Hanio(1,A,B,C),Move(A,C),Move(A,B),Hanio(1,C,A,B),Move(C,B),M
7、ove(A,C),Hanio(2,B,A,C),Hanio(1,B,C,A),Move(B,C),Hanio(1,A,B,C),Move(A,C),Move(B,A),21,分析:规模为n的Hanoi(n)问题,可以分解为2个规模为n-1的Hanoi(n-1)问题和一个Move 操作。所以,n个盘子的移动次数为,2.1 递归的概念,若n=64,则移动次数为264-1,264118,446,744,073,709,551,615,22,264118,446,744,073,709,551,615是个什么概念?实例1:假设每秒钟移动一次,一年约31556926秒,计算表明:移动64个盘子需要580
8、0多亿年。实例2:国王的麦子问题,23,广义hanoi问题问题描述算法分析,Hanoi(n,A,B,C,D),圆盘数 源柱 辅助柱 目标柱,2.1 递归的概念,24,2.1 递归的概念,递归的优点和缺点优点:结构清晰,可读性强,而且容易用数学归纳法来证明算法的正确性,因此它为设计算法、调试程序带来很大方便。缺点:递归算法的运行效率较低,无论是耗费的计算时间还是占用的存储空间都比非递归算法要多。,25,2.1 递归的概念,26,2.1 递归的概念,消除递归的方法采用一个用户定义的栈来模拟系统的递归调用工作栈。该方法通用性强,但本质上还是递归,只不过人工做了本来由编译器做的事情,优化效果不明显。用
9、递推来实现递归函数。通过变换能将一些递归转化为尾递归,从而迭代求出结果。注意:后两种方法在时空复杂度上均有较大改善,但其适用范围有限。,27,分治法的设计思想是:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。凡治众如治寡,分数是也。-孙子兵法,2.2 分治法的基本思想,28,分治法所能解决的问题一般具有以下几个特征:该问题的规模缩小到一定的程度就可以容易地解决;该问题可以分解为若干个规模较小的相同问题,且各个子问题是相互独立的,即子问题之间不包含公共的子问题。利用该问题分解出的子问题的解可以合并为该问题的解;,29,2.2 分治法的基本思想,分治法(Divi
10、de and Conquer)的基本思想:分解(Divide):将一个规模为n的问题,分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同。求解(Conquer):若子问题规模较小而容易被解决则直接解,否则递归地解这些子问题。合并(Merge):将各个子问题的解合并得到原问题的解。,30,2.2 分治法的基本思想,分治法的 设计模式divide-and-conquer(P)if(|P|=n0)adhoc(P);/解决小规模的问题 divide P into smaller subinstances P1,P2,.,Pk;/分解问题 for(i=1;i=k;i+)/递归的解各子问题
11、yi=divide-and-conquer(Pi);return merge(y1,.,yk);/将各子问题的解合并/为原问题的解,31,2.2 分治法的基本思想,启发式规则:平衡子问题:在用分治法设计算法时,最好使子问题的规模大致相同。也就是将一个问题划分成大小相等的k个子问题(通常k2),这种使子问题规模大致相等的做法是出自一种平衡(Balancing)子问题的思想,它几乎总是比子问题规模不等的做法要好。独立子问题:各子问题之间相互独立,这涉及到分治法的效率,如果各子问题不是独立的,则分治法需要重复地解公共的子问题。,32,2.2 分治法的基本思想,分治法的典型情况,33,分治法的时间复杂
12、性分析,通过迭代法求得方程的解:,2.2 分治法的基本思想,34,例:二分搜索技术,问题提出:给定已按升序排好序的n个元素a0:n1,现要在这n个元素中找出一特定元素x。分析:该问题的规模缩小到一定的程度就可以容易地解决;该问题可以分解为若干个规模较小的相同问题;分解出的各个子问题是相互独立的。分解出的子问题的解可以合并为原问题的解;,35,例1:二分搜索技术,36,补充材料减治法,减治法的基本思想减治法(reduce and conquer method)将原问题分解为若干个子问题后,只求解其中一个子问题:原问题的解只存在于其中一个较小规模的子问题中原问题的解与其中一个较小规模的子问题的解之
13、间存在对应关系;减治法是一种退化了的分治法。,37,补充材料减治法,减治法的典型情况:,38,分治法的应用,数值计算问题中的分治法组合问题中的分治法排序问题中的分治法几何问题中的分治法,39,应用专题一,数值计算问题中的分治法大整数的乘法strassen矩阵乘法,40,引:大整数的存储与运算计算机存储数据是按类型分配空间的。例如:在微型机上,为整型提供2个字节的存储空间,则整型数据的范围为3276832767;为长整型提供4个字节的存储空间,则长整型数据的范围为21474836482147483647;,大整数的乘法,41,大整数的乘法,为实型提供4个字节的存储空间,但不是精确存储数据,只有6
14、位精度,数据的范围(3.4e-383.4e+38);为双精度型数据提供8个字节的存储空间,数据的范围(1.7e-3081.7e+308),其精确位数是17位。,42,在用数组存储高精度数据时,从计算的方便性考虑,决定将数据是由低到高还是由高到低存储到数组中;可以每位占一个数组元素空间,也可几位占一个数组元素空间。若需从键盘输入要处理的高精度数据,一般用字符数型组存储,这样无需对高精度数据进行分段输入。,大整数的乘法,43,当N=100时,N!的准确值问题分析:问题要求对输入的正整数N,计算N!的准确值,而N!的增长速度仅次于指数增长的速度,所以这是一个高精度计算问题。,大整数的乘法,44,大整
15、数的乘法,例如:9!=362880100!=93 326215 443944 152681 699263 856266 700490 715968 264381 621468 592963895217 599993 229915 608914 463976 156578286253 697920 827223 758251 185210 916864000000 000000 000000 000000,45,问题描述:设X和Y都是n位的二进制整数,请设计一个有效的算法,可以进行两个n位大整数的乘法运算。分析:1.小学的方法:O(n2)效率太低,46,2.可以用分治法的原理设计一个更有效的算法
16、。将n位的二进制整数分为2段:,则:X=A2n/2+B(乘2n/2,相当于左移n/2位)Y=C2n/2+D于是:XY=(A2n/2+B)(C2n/2+D)=AC2n+(AD+BC)2n/2+BD(1),47,大整数的乘法,效率:4次n/2位整数乘法(AC,AD,BC,BD);3次不超过n位整数加法;2次移位(分别对应乘以2n和2n/2)所有加法和移位共用O(n)步计算。,时间复杂性分析T(n)=O(n2)没有改进,48,时间复杂性分析 T(n)=O(nlog3)=O(n1.59)较大的改进,大整数的乘法,改进:把(1)式稍作修改:XY=AC2n+(AB)(DC)+AC+BD)2n/2+BD(2
17、)效率:3次n/2位整数乘法(AC,BD,(AB)(DC);6次不超过n位整数加、减法和2次移位;,49,大整数的乘法,Char*Mult(char X,char Y,int n)/两个n位整数相乘 S=sign(X)*sign(Y);/取乘积的符号 X=abs(X);Y=abs(Y);if(n=1)return(S*X*Y);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);
18、return S;,注意:该算法可改为十进制数乘法,只需将基数2变为10,即:2n 10n,2n/2 10n/2,50,大整数的乘法,小学的方法:O(n2)效率太低分治法:O(n1.59)较大的改进,51,大整数的乘法,更快的方法?如果将大整数分成更多段,用更复杂的方式把它们组合起来,将有可能得到更优的算法。这个思想导致了快速傅利叶变换(Fast Fourier Transform)的产生,该方法也可以看作是一个复杂的分治算法。对于大整数乘法,它能在O(nlogn)时间内解决。是否能找到线性时间的算法?目前为止还没有结果。,52,strassen矩阵乘法,传统的方法若A和B是2个nn的矩阵,则
19、它们的乘积C=AB同样是一个nn的矩阵。A和B的乘积矩阵C中的元素Ci,j定义为:,若依此定义来计算A和B的乘积矩阵C,则每计算C的一个元素Ci,j,需要做n个乘法和n1次加法。因此,求出矩阵C的n2个元素所需的计算时间为O(n3)。,53,分治法将矩阵A,B和C中每一矩阵都分块成4个大小相等的子矩阵,每个子矩阵都是n/2n/2的方阵。由此可将方程C=AB重写为:,由此可得:,strassen矩阵乘法,54,为了降低时间复杂度,必须减少乘法的次数。Strassen矩阵乘法,strassen矩阵乘法,55,验证:C22=M5+M1-M3-M7=(A11+A22)(B11+B22)+A11(B12
20、-B21)-(A21+A22)B11-(A11-A21)(B11+B12)=A11B11+A11B22+A22B11+A22B22+A11B12-A11B22-A21B11-A22B11-A11B11-A11B12+A21B11+A21B12=A21B12+A22B22,strassen矩阵乘法,56,strassen矩阵乘法,57,完整的Strassen算法如下:STRASSEN(n,A,B,C)if(n=2)MATRIX-MULTIPLY(A,B,C);/普通2*2矩阵相乘 else/将矩阵A和B分块;STRASSEN(n/2,A11,B12-B22,M1);STRASSEN(n/2,A1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 递归 分治
链接地址:https://www.31ppt.com/p-5658403.html