- 1、本文档共57页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二章递归与分
计算机算法设计与分析 第二章递归与分治 递归的概念 简单地说,递归就是用自己来定义自己。 一般地说,一个递归过程P可以表示为基语句S(不含P)和P自身的组合β: P ? β(S, P) 这样的表示包含了过程不终止的可能,因此递归算法应更准确地表述为 递归元 递归算法的思想是将对较大规模的对象的操作归结为对较小规模的对象实施同样的操作。 这种规模的变化就体现在递归算法的变元中的一类(一个或几个)变元上,这类变元被称之为递归元。 递归元的变化是在递归定义中确定的,它的变化应能导致递归算法的终止。 在递归算法的设计中递归元是非常重要的。 Hanoi塔问题 例1:Hanoi塔问题:有A、B、C三根柱子。A上有n个圆盘,自下而上由大到小地叠在一起。 Hanoi塔问题的时间复杂性 Hanoi塔问题的时间复杂性为O(2n)。 证明:对n归纳证明移动次数move(n) = 2n – 1。 归纳基础:当n = 1, move(1) = 1 = 21 – 1。 归纳假设:当n ? k, move(n) = 2n – 1。 归纳步骤:当n= k + 1,移动次数为 move(k+1) = 2(move(k)) + 1 = 2(2k – 1) + 1 = 2k+1 – 1 由归纳法可知对任意的n有move(n) = 2n – 1 常见的递归形式 多变元递归; 多步递归; 嵌套递归; 联立递归 多变元递归 多变元递归就是递归元多于一个的递归。 正整数的划分 在正整数的所有不同划分中,将最大加数n1不大于m的划分个数记为q(n, m),可以建立如下的递归关系: 最简单情形:(1) q(n, 1)=1, q(1, m) =1 n, m≥1; 递归关系: (2) q(n, n) = 1 + q(n, n–1),n>1; 产生的新情况: (3) q(n, m) = q(n, m–1) + q(n–m, m), n>m>1 (4) q(n, m) = q(n, n), n<m。 多步递归 若递归函数f(x, y),其中y是递归元,不仅与f(x, y–1)有关,而且与f(x, y–2),……,乃至f(x, 0)有关,则称为多步递归。 例如Fibonacci函数: 嵌套递归 所谓嵌套递归是指递归调用中又含有递归调用,又称为多重递归。 例如Ackermann函数: 联立递归 联立递归是同时定义几个函数,它们彼此相互调用,从而形成递归,又称间接递归。 例如Hilbert图案,下面所示为H1,H2和H3: Hilbert图案 将Hi记为Ai,将Hi旋转90°, 180°和270°后的图形分别记为Bi,Ci和Di,其中一、二级曲线如下所示: Hilbert图案 于是可得出这些子曲线逐级间存在如下关系: Hilbert图案 依据 有画A的子程序: 画Hilbert图案的时间复杂性 Hilbert图案Ai+1是由Ai、Bi、Ci、和Di中的四个图案,再通过三根直线连接而成的。显然绘制Ai、Bi、Ci、和Di的复杂形式一样的。于是我们有如下的递推公式: Koch曲线 Koch曲线是一种分形图形,其特点是它的每一部分都是它自身。下面是n=1和n=2的Koch曲线: 绘制Koch曲线的算法 Koch(L, i) { //*L为长度,i为级数 if (i == 0) Line(L) //*i为0,画条长为L的线段 else {Koch(L/3, i – 1); Turn(60); Koch(L/3, i – 1); Turn(–120); Koch(L/3, i – 1); Turn(60); Koch(L/3, i – 1);}} Koch曲线的三角形 右边是一个由三条Koch曲线构成的三角形: 绘制Koch曲线的时间复杂度 设T(n)是绘制Koch曲线Kn所需要的时间,则从算法可知,T(n)满足如下递归方程: 递归方法小结 递归方法是将复杂问题分解为较为简单的子问题的组合。这些子问题与原问题相似。 递归算法一定要有一个或几个最简单情况的计算(非递归分支),如果缺少将造成递归不终止。 递归算法是有层次的,低层的解组合成高层的解。各层间最好通过参数传递来交流信息,如使用全局量,则要注意全局量的及时修订。 分治法的基本思想 将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。递归地解这些问题,然后将各个子问题的解合并在一起,从而得到原问题的解。 递归算法的时间复杂性 一般的,递归的时间复杂性可归结为递归方程: 递归算法的时间复杂性 递归算
您可能关注的文档
最近下载
- 2022急诊胸痛心血管标志物联合检测专家共识(全文).pdf VIP
- 2025年四川高处安装、维护、拆除作业_特种作业证考试复习题库资料(含答案).pdf
- 临床医学专业水平测试评分表.pdf VIP
- 2024年四川省绵阳市中考化学真题卷(含答案与解析).pdf VIP
- 《三位数乘两位数》大单元教学设计 (1).docx VIP
- 2024年四川省绵阳市中考数学真题卷(含答案与解析).pdf VIP
- 生如夏花小清新模板(含音频+视频).pptx VIP
- 2024学年统编版高中语文选择性必修下册《客至》优质课一等奖课件28张.pptx
- Sysmex XN-1000全自动血液分析仪标准操作程序.pdf VIP
- 2025安全生产月主题宣讲课件.pptx
文档评论(0)