《数据结构及算法》第11章班委评选(递归算法).ppt

《数据结构及算法》第11章班委评选(递归算法).ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构 第十一章 班委评选(递归算法) 第十一章 递归算法 内容目标: 递归算法的基本思想。 递归算法的设计要点 用递归算法实现班委的评选 背包问题的案例分析 重难点: 递归算法设计思想以及应用 1.功能描述 2.1递归算法的基本实现 递归是设计和描述算法的一种有力工具,由于它在赋值算法的描述中被经常采用。为此在进一步介绍其他算法设计方法之前先讨论它。 能采用递归描述的算法通常具有这样的特征:为求解规模为N的问题,设法将它分解成一些规模较小的问题,然后从这些小问题的解方便地构造出大问题的解,并且这些规模较小的问题也能采用同样的分解和综合方法,分解成规模更小的问题,并从这些更小问题的解构造出规模稍大问题的解,特别地,当规模N=1时,能直接得到解。 2.2递归算法的设计要点 设计要点: 递归算法设计的关键在于找出递归关系(方程)和递归终止(边界)条件。递归关系就是使问题向边界条件转换的规则。递归关系必须能使问题越来越简单,规模越来越小。递归边界条件就是所描述问题的最简单的、可解的情况,它本身不再使用递归的定义。 因此,用递归算法解题,通常有三个步骤: 分析问题、寻找递归关系:找出大规模问题的关系,这样通过递归使问题的规模逐渐变小。 设置边界、控制递归:找出停止条件,即算法可解的最小规模问题。 设计函数、确定参数:和其他算法模块一样设计函数体中的操作和相关参数。 2.3适合递归算法问题特点 递归就是在过程或函数里调用自身。 在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口。 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。 3.1业务实现---班委评选 问题分析: 从n个学生中选取r个学生作为班委,可以将n个学生放入到一个数组中,进行编号。就可看成从n个自然数(1,2,3,…,n)中取r个数的组合(即从n个学生对象中选取r个学生对象的组合)。例如当n=5,r=3时所有的组合如下 : 5 4 3 5 4 2 5 4 1 5 3 2 5 3 1 5 2 1 4 3 2 4 3 1 4 2 1 3 2 1 Total=10{组合总数} 3.2业务实现---班委评选 算法设计: 我们将n个学生编号为1,2,3,…,n,分别对应数组的下标为0,1,2,…,n-1。应用用递归思想进行设计时,将学生编号从大到小排列是必须的,因为递归算法设计是找出大规模问题与小规模问题的关系。 分析上面数据,组合数的规律如下: 首先固定第一个数5,其后就是求解n=4,r=2的组合数,共6个组合。 其次固定第一个数4,其后就是求解n=3,r=2的组合数,共3个组合。 最后固定第一个数3,其后就是求解n=2,r=2的组合数,共1个组合。 这就找到了“5个数中3个数的组合” 与 “4个数中2个数的组合、3个数中2个数的组合、2个数中2个数的组合”的递归关系。 一般地,递归算法的两个步骤为: n个数中r个数的组合递推到“n-1个数中r-1个数的组合,n-2个数中r-1个数的组合,…,r-1个数中有r-1个数的组合”共有n-r+1次递归。 递归的停止条件是r=1 。 3.3业务实现---班委评选 数据结构设计: 本算法的主要操作就是输出,当递归到r=1时就有一组新的组合产生,就应该输出一个结果。但注意n=5,r=3的例子中的递归规律,先固定5,然后要进行多次递归。也就是说,数字5 要多次输出,所以要用数组存储先确定的一个组合中的数,以备每次递归到r=1时输出,所以用数组来记录要进行输出的小标编号,并设为成员变量。 3.4业务实现---班委评选 构建学生信息顺序表类: public class node {//学生信息顺序表 public Student_info[] Data;//学生信息数组 public int Length;//学生信息长度 public node() { } } 3.5业务实现---班委评选 班委评选业务类: public class zuhe { public int Max;//定义数组的最大长度 public node L=new node ();//学生信息顺序表 public StudentManger Ba=new StudentManger ();//访问数据控制层对象 public int []a;//用以记录学生信息的下标 public zuhe() { L.Data =new Student_info[Ba.Max];//初始化学生信息顺序表

文档评论(0)

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

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

1亿VIP精品文档

相关文档