贪心算法_jt课案.doc

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
贪心算法_jt课案

中学生信息学竞赛中 贪心算法的教学和应用思考 专 业:计算机应用  姓 名: 江 涛 摘 要   国际信息学奥林匹克(International Olympiad in Informatics,简称IOI)始于1989年,由联合国教科文组织每年举行一次,宗旨是推动普及,并培训、发现这方面有特殊都能的学生。IOI培训涉及知识有:程序设计语言、常用算法、组合数学、图论、人工智能搜索等。从信息学竞赛培训十多年经验出发,针对中学生的知识结构和思维方式进行了研究,发现很多知识用经典的教材教学效果并不理想。本文通过对贪心算法在培训中的教学实践的总结,体现了一些针对中学生的教学模式特点。 第1章,以深入浅出、直观明了的形式尽量用图形形式描述了贪心算法与其它求最优性算法的不同之处。 第2章,对贪心算法的核心问题:证明---参考了大量文献,抽象、归纳出三种证明思路,实用性强(在教学成果中已经体现),并有效地减少了数学性很强的形式逻辑证明。 第3章,本着思维培训的开发性、创新性,进一步提出了贪心算法应用形式的多样性的几个问题和想法,以期在今后教学中多探索总结。 关键词  信息学奥林匹克竞赛 贪心算法 最优问题 构造法 反证法 调整法 1 引 言 贪心算法一般来说是解决“最优问题”,具有编程简单、运行效率高、空间复杂度低等特点。是信息学竞赛中的一个有为武器,受到广大同学们的青睐。本文根据十多年的竞赛培训实践,就贪心算法的特点和教学注意事项作些总结。 2 贪心算法与简单枚举和动态规划的运行方式比较 贪心算法一般是求“最优解”这类问题的。最优解问题可描述为:有n个输入,它的解是由这n个输入的某个子集组成,并且这个子集必须满足事先给定的条件。这个条件称为约束条件。而把满足约束条件的子集称为该问题的可行解。这些可行解可能有多个。为了衡量可行解的优劣,事先给了一个关于可行解的函数,称为目标函数。目标函数最大(或最小)的可行解,称为最优解。 (a)求“最优解”最原始的方法为搜索枚举方案法(一般为回溯法)。 除了极简单的问题,一般用深度优先搜索或宽度优先搜索。通常优化方法为利用约束条件进行可行性判断剪枝;或利用目标函数下界(或上界),根据当前最优解进行分枝定界。 (b)其次现今竞赛中用的比较普遍的动态规划(需要满足阶段无后效性原则)。 动态规划主要是利用最最优子问题的确定性,从后向前(即从小规模向大规模)得到当前最优策略,从而避免了重复的搜索。 举例说明:求多段图的最短路径。 在图(1)中,我们省略了各线段的长度。 如果用回溯法,搜索树大致如下: 显然,上面的搜索有大量重复性工作。比如节点8、9、10到11的最短路分别被调用了9次,从节点5、6、7到节点11也分别搜索了3次。 如果先算出节点8、9、10到11的最短路,由于它与前面的点无关,因此最优值确定下来,再用它们求定节点5、6、7到节点11的最短路径。同理,再用节点5、6、7的最优值,来求节点2、3、4优值。最后从节点2、3、4推出1到11的最优值。显然复杂度大为降低。 当然,如果本题把简单搜索改为搜索+记忆化的方法,则就是得能动态规划的原理,本质上就是动态规划,只是实现的方法不同与传统的表格操作法。搜索+记忆化算法有其特有的特点,以后再讨论。 (c)贪心算法则不同,它不是建立在枚举方案的基础上的。它从前向后,根据当前情况,“贪心地”决定出下一步,从而一步一步直接走下去,最终得到解。 假如上面的例子中,我们定下这样的贪心策略:节点号k%3= =1。则有图3: 显然,它只访问了节点1、4、7、10、11,工作量最少,效率最高。当然,对本题来说,它不能得到最优解―――最短路径。 从图3中可以看出,贪心算法是一种比动态规划更高效的算法。只是要保证得到最优解是贪心算法的关键。 贪心算法的一般框架为: Procedure Greedy(A,n) //A问题有n个输入 Begin Init(ans) //初始化 for i:=1 to n do now=select(A) //按设计的标准选取一个“节点”   delete(A,now) //把A中的now删掉 if can(ans,now) then unio(ans,now) //如果可行性通过,放入解中。 end for end; 3 贪心算法的关键――――正确性证明 动态规划要满足最优子结构原则,贪心算法呢?就目前的资料看,有个证明模型是“矩阵胚理论”,但要证明一个问题是矩阵胚,十分困难。并且也不是常见的可用贪心算法问题都能用矩阵胚来证明。因此,可以认为贪心算法的正确性证明是个难点。有些选手在没能证明时,也大胆设想结论应该是正确的。有

文档评论(0)

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

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

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档