《数据结构及算法》第15章优秀团队组建(贪婪算法).ppt

《数据结构及算法》第15章优秀团队组建(贪婪算法).ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第十五章优秀团队组建(贪婪算法) 内容目标: 贪婪算法基本概念。 优秀团队组建贪婪算法实现 可绝对贪婪案例分析(长整数问题) 相对贪婪案例分析(货币问题) 重难点: 各种贪婪算法设计思想以及实现 1.功能描述 在学校举行的一次活动中,需要构建一个由5人组成的团队,去参加数学、语文、英语、体育、政治比赛。每项比赛只有一人参加。请根据学生信息表中学生的成绩。找出最佳的五个人选。实现功能界面如下: 2.1贪婪算法基本概念 基本概念: 贪婪(Greedy)法又叫登山法,它的基本思想是逐步达到山顶,即逐步获得最优解,是解决最优化问题时的一种简单但适用范围有限的策略。已经学会在解的范围可以确定的情况下,可以采取枚举或递归策略,找出所有的解,一一比较它们,最后找到最优解;但是当解的范围特别大时,蛮力枚举或递归搜索算法的效率非常低,可能在有限的时间内找不出问题的解。这时,可以考虑用贪心的策略,选取那些最可能到达解的情况来考虑。 贪婪算法没有固定的算法框架,算法设计的关键是贪婪策略的选择。一定要注意,选择的贪婪策略要具有无后向性,即某阶段状态一旦确定以后,不受这个状态以后的决策影响。也就是说某状态以后的过程不会影响以前的状态,只与当前状态有关,也称这种特性为无后效性。因此,适应用贪婪策略解决的问题类型很少,对所采用的贪婪策略一定要仔细分析其是否满足无后效性。 2.2贪婪算法基本概念 贪婪策略算法设计框架 该策略下的算法框架: 从问题的某一初始解出发: While(能朝给定总目标前进一步) 利用可行的决策,求取可行解的一个解元素; 由所有解元素组成问题的一个可行解。 贪婪策略算法选择: 首先,贪婪法的原理是通过局部最优来达到全局最优,采用的是逐步构造最优解的方法。在每个阶段,都作出一个看上去最优的(在一定的标准下),决策一旦作出,就不可再更改。用贪婪算法只能解决通过局部最优策略能达到全局最优问题。因此,一定要注意判断问题是否适合采用贪婪算法策略,找到的解是否一定是问题的最优解。 3.1业务实现---优秀团队组建 算法分析和设计 本模块的功能是,在一个班有n个学生,参加了数学、语文、英语、体育、政治五门功课的考试,现要根据学生考试的成绩,组建由5人组成的团队参加比赛,每门功课只有一人参加,且一人只能参加一个学科比赛。下面利用贪婪算法来构建这样的团队: 根据学生的成绩,每门课程只选一位学生,最好就选各门功课的第一名,但同一位学生只能参加一个课程的比赛,各科的第一名,有可能是同一个学生。因此得把选择学生的范围扩大,但又不能无限制扩大,达不到优化算法的效果。我们应用选择排序取各科的前5名,共有5*5=25位学生的成绩元素作为备选列表。可以认为所选的优秀团队在这25个元素之中。 将25个学生成绩元素采用排序,使成绩从大到小进行排列。 3.2业务实现---优秀团队组建 算法分析和设计 从第1元素开始,逐个读取来进行团队成员的构建: 第1元素成绩最高,其对应的学生就是我们所要组建的团队成员之一,放入组建团队数组的第一位置。 读取第2个元素,判断该元素的学生姓名是否是第1元素的学生姓名一致,该成绩科目是否与第1元素的成绩科目一致,若这两个条件有1满足,则不选择该元素,否则这也是优秀团队成员之一,放置团队的第2个位置。 重复第b)步的操作,逐个读取后面的元素,分别给已放入团队数组成员逐个比较,若读取元素的学生姓名,成绩科目均与所照到的成员都不相同,则加入到优秀团队数组中,否则继续读取下一个元素,直到5个成员都找到位置。 3.3业务实现---优秀团队组建 学生成绩结点类 用以记录学生成绩的信息,包括:学生对象、学生成绩科目、学生成绩。为了方便我们记录学生信息时只记录在数据控制层数组中的位置,学生科目只记录其对应的编号,具体实现如下: public class node {//学生成绩结点类 public int No;//学生在数据控制层数组位置 public int flag;//学生成绩科目:0语文1数学2英语3体育4政治 public float cj;//学生科目成绩 public node() { } } 3.4业务实现---优秀团队组建 优秀团队评选业务类 该业务类用以实现学生成绩信息的初始化,利用前面分析的贪婪算法进行优秀团队的组建,其主要的成员和方法如下: public class yxtd { public StudentManger Ba=new StudentManger ();//访问数据控制层对象 node [] td=new node [25];//学生成绩对象数组 node [] start; //记录学生初始信息 public yxtd() { } public void td

文档评论(0)

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

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

1亿VIP精品文档

相关文档