【教学课件】第2章递归与分治.ppt
《【教学课件】第2章递归与分治.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第2章递归与分治.ppt(122页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 2005第2章 递归与分治策略最通用的算法设计技术最通用的算法设计技术学习要点学习要点:o理解递归的概念。理解递归的概念。o掌握设计有效算法的分治策略。掌握设计有效算法的分治策略。o通过典型的范例学习分治策略设计通过典型的范例学习分治策略设计技巧。技巧。1算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳 2.1 递归的概念例例1:阶乘函数阶乘函数 阶乘函数可递归地定义为:阶乘函数可递归地定义为:边界条件边界条件递归方程递归方程注意:注意:(1)边界条件与递归方程是递归函数的二个要素,递归函数只边界条件与递归方程是递归函数的二个要素,递归函数只有具备
2、了这两个要素,才能在有限次计算后得出结果。有具备了这两个要素,才能在有限次计算后得出结果。(2)非递归定义:非递归定义:2算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳 2.1 递归的概念|例例2:Fibonacci数列数列n问题引入问题引入n裴波那契(裴波那契(Fibonaccileonardo,约,约1170-1250)是意大)是意大利著名数学家在他的著作算盘书中许多有趣的问利著名数学家在他的著作算盘书中许多有趣的问题,最富成功的问题是著名的题,最富成功的问题是著名的“兔子繁殖问题兔子繁殖问题”:如如果每对兔子每月繁殖一对子兔,而子兔在出生后第
3、二个果每对兔子每月繁殖一对子兔,而子兔在出生后第二个月就有生殖能力,试问一对兔子一年能繁殖多少对兔子月就有生殖能力,试问一对兔子一年能繁殖多少对兔子?n问题分析问题分析月份月份初生初生成熟成熟总数总数110120113112412352356358758133算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳 2.1 递归的概念|数列的特点数列的特点n(1)数列的增长速度)数列的增长速度n(2)自然科学中的若干实例)自然科学中的若干实例n(3)构造一个新数列)构造一个新数列4算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机
4、科学学院 刘芳|定义:定义:2.1 递归的概念5算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳 2.1 递归的概念如何求解?如何求解?n解法解法1:0(0.618n)int fibonacci(int n)if(n=0)|(n=1)return n;return fibonacci(n-1)+fibonacci(n-2);n解法解法2:0(n)n解法解法3:0(logn)6算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳 2.1 递归的概念|思考:思考:n楼梯问题楼梯问题n有一楼梯共有有一楼梯共有n阶,上
5、楼可以一步上一阶,也可以一步阶,上楼可以一步上一阶,也可以一步上两阶。上两阶。n编一个程序,计算共有多少种不同的走法?编一个程序,计算共有多少种不同的走法?7算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳 例例3Ackerman函数函数 当一个函数及它的一个变量是由函数自身定义时,称这个当一个函数及它的一个变量是由函数自身定义时,称这个函数是函数是双递归函数双递归函数。Ackerman函数函数A(n,m)定义如下定义如下:2.1 递归的概念8算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳 2.1 递归的
6、概念|Ackerman函数函数nA(n,0)n+2nA(n,1)2nnA(n,2)2n。nnA(n,4)的增长速度非常快,以至于没有适当的数的增长速度非常快,以至于没有适当的数学式子来表示这一函数。学式子来表示这一函数。9算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳 2.1 递归的概念|例例4排列问题排列问题n设计一个递归算法生成设计一个递归算法生成n个元素个元素r1,r2,rn的全的全排列。排列。n设设R=r1,r2,rn是要进行排列的是要进行排列的n个元素,个元素,Ri=R-ri。n集合集合X中元素的全排列记为中元素的全排列记为perm(X)
7、,(ri)perm(X)表示在全排列表示在全排列perm(X)的每一个排列前加上前缀得的每一个排列前加上前缀得到的排列。到的排列。10算法设计与分析算法设计与分析1时,时,perm(R)由由:(r1)perm(R1)(r2)perm(R2)(rn)perm(Rn)n构成。构成。|参考算法:参考算法:11算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳 2.1 递归的概念|例例5整数划分问题整数划分问题n将一个正整数将一个正整数n表示成形如下式的一系列正整数的表示成形如下式的一系列正整数的和,称为和,称为n的一个划分。的一个划分。n形如:形如:nn1n
8、2nk其中:其中:(ni1,i1,2,k,k1)且且nn1n2nk112算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳 2.1 递归的概念n例如:整数例如:整数6的分划数有的分划数有11种种:n6;n5+1;n4+2,4+1+1;n3+3,3+2+1,3+1+1+1;n2+2+2,2+2+1+1,2+1+1+1+1;n1+1+1+1+1+1;13算法设计与分析算法设计与分析m1;n正整数正整数n的最大加数的最大加数n1不大于不大于m的划分的划分由由n1=m的划分的划分和和n1m-1的划分的划分组成。组成。14算法设计与分析算法设计与分析递归与分治策
9、略递归与分治策略 四川师范大学 计算机科学学院 刘芳 而:正整数而:正整数n n的划分数的划分数p(n)=q(n,n)。2.1 递归的概念|因此:因此:nq(n,m)的递归定义如下的递归定义如下15算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳 2.1 递归的概念|例例6Hanoi塔问题塔问题n问题描述:问题描述:16算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳|问题分析问题分析:2.1 递归的概念?A B C A B CHanoi(n ,A ,B ,C )圆盘数圆盘数 源柱源柱 辅助柱辅助柱 目标柱
10、目标柱17算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳 =+A B CHanoi(n-1,A,C,B)A B CHanoi(n-1,B,A,C)A B CMove(n,A,C)2.1 递归的概念18算法设计与分析算法设计与分析 0)hanoi(n-1,a,c,b);move(a,b);hanoi(n-1,c,b,a);|递归函数的运行轨迹递归函数的运行轨迹2.1 递归的概念19算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳 Hanio(3,A,B,C)Hanio(2,A,C,B)Hanio(1,A,B
11、,C)Move(A,C)Move(A,B)Hanio(1,C,A,B)Hanio(1,A,B,C)Hanio(2,A,C,B)Move(C,B)Hanio(1,C,A,B)Move(A,C)Hanio(2,B,A,C)Hanio(1,B,C,A)Move(B,C)Hanio(1,A,B,C)Hanio(1,B,C,A)Move(A,C)Hanio(2,B,A,C)Move(B,A)Hanio(1,A,B,C)结束结束20算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳|分析:分析:n规模为规模为n的的Hanoi(n)问题,可以分解为问题,可以分解为2
12、个规模为个规模为n-1的的Hanoi(n-1)问题和一个问题和一个Move操作。操作。n所以,所以,n个盘子的移动次数为个盘子的移动次数为2.1 递归的概念若若n=64,则移动次数为,则移动次数为264-1264118,446,744,073,709,551,61521算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳|264118,446,744,073,709,551,615是个什么概念?是个什么概念?n实例实例1:n假设每秒钟移动一次,一年约假设每秒钟移动一次,一年约31556926秒,秒,n计算表明:移动计算表明:移动64个盘子需要个盘子需要5
13、800多亿年。多亿年。n实例实例2:n国王的麦子问题国王的麦子问题22算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳|广义广义hanoi问题问题n问题描述问题描述n算法分析算法分析?Hanoi(n ,A ,B ,C ,D)圆盘数圆盘数 源柱源柱 辅助柱辅助柱 目标柱目标柱 A B C D A B C D2.1 递归的概念23算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳 2.1 递归的概念|递归的优点和缺点递归的优点和缺点n优点:优点:n结构清晰,可读性强,而且容易用数学归纳法来证明算结构清晰,可读性强
14、,而且容易用数学归纳法来证明算法的正确性,因此它为设计算法、调试程序带来很大方法的正确性,因此它为设计算法、调试程序带来很大方便。便。n缺点:缺点:n递归算法的运行效率较低,无论是耗费的计算时间还是递归算法的运行效率较低,无论是耗费的计算时间还是占用的存储空间都比非递归算法要多。占用的存储空间都比非递归算法要多。24算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳 递归递归非递归非递归程序可读性程序可读性易易难难代码量大小代码量大小小小大大时间时间长长短短占用空间占用空间大大小小适用范围适用范围广广窄窄设计难度设计难度易易难难2.1 递归的概念25算
15、法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳 2.1 递归的概念|消除递归的方法消除递归的方法n采用一个用户定义的栈来模拟系统的递归调用工作栈。该采用一个用户定义的栈来模拟系统的递归调用工作栈。该方法通用性强,但本质上还是递归,只不过人工做了本来方法通用性强,但本质上还是递归,只不过人工做了本来由编译器做的事情,优化效果不明显。由编译器做的事情,优化效果不明显。n用递推来实现递归函数。用递推来实现递归函数。n通过变换能将一些递归转化为尾递归,从而迭代求出结果。通过变换能将一些递归转化为尾递归,从而迭代求出结果。|注意:注意:n后两种方法在时空复杂度
16、上均有较大改善,但其适用范围后两种方法在时空复杂度上均有较大改善,但其适用范围有限。有限。26算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳 分治法的设计思想是分治法的设计思想是:将一个难以直接解决的大问题,分割成一些规将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。模较小的相同问题,以便各个击破,分而治之。凡治众如治寡,分数是也。凡治众如治寡,分数是也。-孙子兵法孙子兵法2.2 分治法的基本思想27算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳|分治法所能解决的问题一
17、般具有以下几个特征:分治法所能解决的问题一般具有以下几个特征:n该问题的规模缩小到一定的程度就可以容易地解该问题的规模缩小到一定的程度就可以容易地解决;决;n该问题可以分解为若干个规模较小的相同问题,该问题可以分解为若干个规模较小的相同问题,且各个子问题是相互独立的,即子问题之间不包且各个子问题是相互独立的,即子问题之间不包含公共的子问题。含公共的子问题。n利用该问题分解出的子问题的解可以合并为该问利用该问题分解出的子问题的解可以合并为该问题的解;题的解;28算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳 2.2 分治法的基本思想|分治法(分治法(
18、Divide and Conquer)的基本思想)的基本思想:n分解分解(Divide):n将一个规模为将一个规模为n的问题,的问题,分解分解为为k个规模较小的子问题,个规模较小的子问题,这些子问题互相独立且与原问题形式相同。这些子问题互相独立且与原问题形式相同。n求解求解(Conquer):n若子问题规模较小而容易被解决则直接解,否则若子问题规模较小而容易被解决则直接解,否则递归递归地地解这些子问题。解这些子问题。n合并合并(Merge):n将各个子问题的解将各个子问题的解合并合并得到原问题的解。得到原问题的解。29算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算
19、机科学学院 刘芳 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+)/递归的解各子问题递归的解各子问题 yi=divide-and-conquer(Pi);return merge(y1,.,yk);/将各子问题的解合将各子问题的解合并并/为原问题的解为原问题的解30算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学
20、 计算机科学学院 刘芳 2.2 分治法的基本思想|启发式规则:启发式规则:n平衡子问题:平衡子问题:n在用分治法设计算法时,最好使子问题的规模大致相同。在用分治法设计算法时,最好使子问题的规模大致相同。也就是将一个问题划分成大小相等的也就是将一个问题划分成大小相等的k个子问题(通常个子问题(通常k2),这种使子问题规模大致相等的做法是出自一种),这种使子问题规模大致相等的做法是出自一种平衡(平衡(Balancing)子问题)子问题的思想,它几乎总是比子问的思想,它几乎总是比子问题规模不等的做法要好。题规模不等的做法要好。n独立子问题:独立子问题:n各子问题之间相互独立,这涉及到分治法的效率,如
21、果各子问题之间相互独立,这涉及到分治法的效率,如果各子问题不是独立的,则分治法需要重复地解公共的子各子问题不是独立的,则分治法需要重复地解公共的子问题。问题。31算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳 2.2 分治法的基本思想|分治法的典型情况分治法的典型情况 A Problem of size nSubproblem1 of size n/2Subproblem2 of size n/2A solution to subproblem1A solution to subproblem2A solution to the original
22、problem32算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳|分治法的时间复杂性分析分治法的时间复杂性分析通过迭代法求得方程的解通过迭代法求得方程的解:2.2 分治法的基本思想33算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳 例:二分搜索技术|问题提出:问题提出:n给定已按升序排好序的给定已按升序排好序的n个元素个元素a0:n1,现要在,现要在这这n个元素中找出一特定元素个元素中找出一特定元素x。|分析:分析:n该问题的规模缩小到一定的程度就可以容易地解决;该问题的规模缩小到一定的程度就可以容易地
23、解决;n该问题可以分解为若干个规模较小的相同问题该问题可以分解为若干个规模较小的相同问题;分解分解出的各个子问题是相互独立的。出的各个子问题是相互独立的。n分解出的子问题的解可以合并为原问题的解;分解出的子问题的解可以合并为原问题的解;34算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳 例1:二分搜索技术35算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳 补充材料减治法|减治法的基本思想减治法的基本思想n减治法(减治法(reduce and conquer method)n将原问题分解为若干个子问题后,
24、只求解其中一个子问将原问题分解为若干个子问题后,只求解其中一个子问题:题:p原问题的解只存在于其中一个较小规模的子问题中原问题的解只存在于其中一个较小规模的子问题中p原问题的解与其中一个较小规模的子问题的解之间原问题的解与其中一个较小规模的子问题的解之间存在对应关系;存在对应关系;n减治法是一种退化了的分治法。减治法是一种退化了的分治法。36算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳 补充材料减治法|减治法的典型情况:减治法的典型情况:A Problem of size nSubproblem of size n/2A solution to
25、subproblemA solution to the original problem37算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳 分治法的应用n数值计算问题中的分治法数值计算问题中的分治法n组合问题中的分治法组合问题中的分治法n排序问题中的分治法排序问题中的分治法n几何问题中的分治法几何问题中的分治法38算法设计与分析算法设计与分析递归与分治策略递归与分治策略 四川师范大学 计算机科学学院 刘芳 应用专题一|数值计算问题中的分治法数值计算问题中的分治法n大整数的乘法大整数的乘法nstrassen矩阵乘法矩阵乘法39算法设计与分析算法设计与
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 递归 分治
限制150内