第2章递归与分治.ppt

  1. 1、本文档共117页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第2章 递归与分治策略 几个例子 2.1 递归的概念 2.2 分治法的基本思想 2.3 分治法的应用 本章小结 几个例子 称球游戏 给定n个球,其中一个球为次品。次品在外表上与正常球无区别,但重量有分别(可能偏重或偏轻)。现在给一个天平,问:需要称几次才能将次品甄别出来? 募捐问题 向贫困山区儿童募捐10,000元。 世界杯足球赛 全球200多支球队里,选出最好的。 2.1 递归的概念 例2: Fibonacci数列 问题引入 裴波那契(Fibonacci leonardo,约1170-1250)是意大利著名数学家.在他的著作《算盘书》中许多有趣的问题,最富成功的问题是著名的“兔子繁殖问题”: 如果每对兔子每月繁殖一对子兔,而子兔在出生后第二个月就有生殖能力,试问一对兔子一年能繁殖多少对兔子? 问题分析 2.1 递归的概念 数列的特点 (1)数列的增长速度 (2)自然科学中的若干实例 (3)构造一个新数列 定义: 2.1 递归的概念 如何求解? 解法1:O(0.618n) int fib (int n) { if ((n=0)||(n==1)) return n; return fibonacci(n-1)+fibonacci(n-2); } 解法2: O(n) 解法3:O(logn) 2.1 递归的概念 思考: 楼梯问题 有一楼梯共有n阶,上楼可以一步上一阶,也可以一步上两阶。 编一个程序,计算共有多少种不同的走法? Ackerman函数 A(n,0)=n+2 A(n,1) = 2n A(n,2) = 2n 。 A(n,4)的增长速度非常快,以至于没有适当的数学式子来表示这一函数。 例4 排列问题 设计一个递归算法生成n个元素{r1,r2,…,rn}的全排列。 设R={r1,r2,…,rn}是要进行排列的n个元素,Ri=R-{ri}。 集合X中元素的全排列记为perm(X),(ri)perm(X)表示在全排列perm(X)的每一个排列前加上前缀得到的排列。 2.1 递归的概念 R的全排列可归纳定义如下: 当n=1时,perm(R)=(r),其中r是集合R中唯一的元素; 当n1时,perm(R)由: (r1)perm(R1) (r2)perm(R2) ……… (rn)perm(Rn) 构成。 参考算法: 例5 整数划分问题 将一个正整数n表示成形如下式的一系列正整数的和,称为n的一个划分。 形如: n=n1+n2+……+nk 其中: (ni≥1,i=1,2,……,k,k≥1)且 n≥n1≥n2≥……≥nk ≥1 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+1+1; 1+1+1+1+1+1; 分析: 将最大加数n1不大于m的划分个数记作q(n,m) (1) q(n,1)=1,n31; (2) q(n,m)=q(n,n),m3n; 最大加数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 的划分组成。 因此: q(n,m)的递归定义如下 例6 Hanoi塔问题 问题描述: 问题分析: 2.1 递归的概念 2.1 递归的概念 递归求解 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 递归的概念 分析: 规模为n的Hanoi(n)问题,可以分解为2个规模为n-1的Hanoi(n-1)问题和一个Move 操作。 所以,n个盘子的移动次数为 2.1 递归的概念 264-1=18,446,744,073,709,551,615是个什么概念? 实例1: 假设每秒钟移动一次,一年, 计算表明:移动64个盘子需要5800多亿年。 实例2: 国王的麦子问题 一个高4米、宽10米的粮仓装麦子,这个粮仓有3000万公里长,能绕地球赤道7

文档评论(0)

junjun37473 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档