- 1、本文档共68页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第2章__递归和分治
第二章 递归和分治 主要知识点 理解递归的概念。 掌握设计有效算法的分治策略。 通过下面的范例学习分治策略设计技巧。 (1)二分搜索技术; (2)大整数乘法; (3)Strassen矩阵乘法; (4)棋盘覆盖; (5)合并排序和快速排序; (6)线性时间选择; (7)最接近点对问题; (8)循环赛日程表。 算法总体思想 将要求解的较大规模的问题分割成k个更小规模的子问题。 2.1 递归的概念 递归技术使算法描述简单明了、易于理解、容易编程和验证。 在思想方法上,把递归技术分为: 基于归纳法的递归:应用归纳法的思想; 基于分治法的递归:把问题划分成一个或多个子问题来递归求解。 2.1 递归的概念 直接或间接地调用自身的算法称为递归算法。用函数自身给出定义的函数称为递归函数。 由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。在这种情况下,反复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。这自然导致递归过程的产生。 分治与递归像一对孪生兄弟,经常同时应用在算法设计之中,并由此产生许多高效算法。 2.1.1 基于归纳的递归算法 归纳法的思想方法:对规模为n的问题P(n) 1. 基础步: 是问题P(1)的解; 2. 归纳步:对所有的 ,若 是问题P(k)的解,则 是问题P(k+1)的解。其中, 是对 的某种运算或处理。 2.1.2 递归算法的例子 2.1.2 递归算法的例子 算法 计算阶乘函数 基本操作:第4行的乘法 时间复杂性递归方程: 容易得到, 时间复杂性: 2.1.2 递归算法的例子 2.1.2 递归算法的例子 2.1.2 递归算法的例子 例3 Ackerman函数 A(n,m)的自变量m的每一个值都定义了一个单变量函数: M=0时,A(n,0)=n+2 M=1时,A(n,1)=A(A(n-1,1),0)=A(n-1,1)+2,和A(1,1)=2故A(n,1)=2*n M=2时,A(n,2)=A(A(n-1,2),1)=2A(n-1,2),和A(1,2)=A(A(0,2),1)=A(1,1)=2,故A(n,2)= 2^n 。 M=3时,类似的可以推出 M=4时,A(n,4)的增长速度非常快,以至于没有适当的数学式子来表示这一函数。 2.1.2 递归算法的例子 例3 Ackerman函数 定义单变量的Ackerman函数A(n)为,A(n)=A(n,n)。 定义其拟逆函数α(n)为:α(n)=min{k|A(k)≥n}。即α(n)是使n≤A(k)成立的最小的k值。 α(n)在复杂度分析中常遇到。对于通常所见到的正整数n,有α(n)≤4。但在理论上α(n)没有上界,随着n的增加,它以难以想象的慢速度趋向正无穷大。 2.1.2 递归算法的例子 2.1.2 递归算法的例子 例4 排列问题 存放于数组A的n个元素,生成其排列: 1. 第一个元素不动,生成后面n-1个元素的排列; 2. 第一、第二个元素互换,生成后面n-1个元素的排列; 3. 最后,第一个、第n个元素互换,生成后面n-1个元素的排列; 2.1.2 递归算法的例子 例4 排列问题 为生成后面n-1个元素的排列,继续采取下面的步骤: 1. 第二个元素不动,生成后面n-2个元素的排列; 2. 第二、第三个元素互换,生成后面n-2个元素的排列; 3. 最后,第二个、第n个元素互换,生成后面n-2个元素的排列; 2.1.2 递归算法的例子 例4 排列问题 当排列的前n-2个元素已确定后,为生成后面2个元素的排列,可以: 1. 第n-1个元素不动,生成后面1个元素的排列,此时,n个元素已构成排列; 2. 第n-1、第n个元素互换,生成后面1个元素的排列,此时,n个元素已构成排列; 例:对数组 ,算法的执行过程和递归栈的变化情况: 2.1.2 递归算法的例子 例4 排列问题:时间复杂性分析 基本操作:元素输出 递归方程: 得到 。 算法的运行时间: 。 每一次递归需常数个工作单元,递归深度为n,递归栈的空间为 。 例 Hanoi塔问题 设a,b,c是3个塔座。开始时,在塔座a上有一叠共n个圆盘,这些圆盘自下而上,由大到小地叠在一起。各圆盘从小到大编号为1,2,…,n,现要求将塔座a上的这一叠圆盘移到塔座b上,并仍按同样顺序叠置。在移动圆盘时应遵守以下移动规则: 规则1:每次只能移动1个圆盘; 规则2:任何时刻都不允许将较大的圆盘压在较小的圆盘之上; 规则3:在满足移动规则1和2的前提下,可将圆盘移至a
您可能关注的文档
- 读书小状元五年级试卷.doc
- 试验工程师考试练习题.doc
- 试题精选之2012江苏南京中考3.doc
- 读数写数说课稿.doc
- 读写易课后翻译技巧答案.doc
- 课中行动策略.docx
- 试验检测员考试复习题113.doc
- 课件名称决策力与领导力--92分.docx
- 第22课分页技术和登陆.ppt
- 课堂教学“系列课型达标活动.doc
- 绿电2022年系列报告之一:业绩利空释放,改革推动业绩反转和确定成长.docx
- 化学化工行业数字化转型ERP项目企业信息化规划实施方案.pdf
- 【研报】三部门绿电交易政策解读:溢价等额冲抵补贴,绿电交易规模有望提升---国海证券.docx
- 中国债券市场的未来.pdf
- 绿电制绿氢:实现“双碳”目标的有力武器-华创证券.docx
- 【深度分析】浅析绿证、配额制和碳交易市场对电力行业影响-长城证券.docx
- 绿电:景气度+集中度+盈利性均提升,资源获取和运营管理是核心壁垒.docx
- 节电产业与绿电应用年度报告(2022年版)摘要版--节能协会.docx
- 2024年中国人工智能系列白皮书-智能系统工程.pdf
- 如何进行行业研究 ——以幼教产业为例.pdf
文档评论(0)