国家集训队205论文集 胡伟栋.doc

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

浅析非完美算法在信息学竞赛中的应用 湖南省长沙市长郡中学 胡伟栋 【目录】 摘要 2 关键字 2 正文 2 引言 2 非完美算法的一些基本方法 3 随机贪心法 3 抽样测试法 4 部分忽略法 8 完美算法的依据——RP类问题与Monte-Carlo算法 11 非完美算法的共性 11 非完美算法的优点与缺点 12 总结 13 感谢 13 参考文献 13 附录 13 【摘要】 非完美算法就是用算法正确性的少量损失来换取时间、空间效率以及编程复杂度的算法。本文介绍了非完美算法的几种重要方法及非完美算法的优缺点,从中,可以看出:并不是完全正确的算法就一定好过非完美算法,有可能因为非完美算法的不完全性,反而使不正确的算法在很多方面比正确算法表现得更好。 【关键字】 非完美算法 随机化贪心法 抽样测试法 部分忽略法 【正文】 一、引言 在平时,我们研究的算法基本都是完全正确的算法,我们所追求的,也是尽量使我们的算法正确。但在实际应用中,有很多情况都不会对数据进行天衣无缝的正确处理。如:图片、音频、视频的压缩存储,很多压缩率比较高的方法都是有损压缩;很多密码验证的方法都是采用多对一的运算方法,通过验证的不代表密码真正正确;搜索引擎所提供的搜索,并不能将所有满足条件的都找到……显然,我们不会因为它们的不完美而不使用它们,它们的存在,有着它们的实际意义:图片、音频、视频的压缩存储,如果不损失一些,不可能将文件压缩得很小;密码验证虽是多对一,但找到两个所对的是同一个何尝容易;搜索引擎虽不能搜索到100%的结果,但其方便、快捷是无以伦比的…… 那么,在信息学竞赛中是否也可以用非完美算法解题呢? 本文试图介绍一些比较有用的常见非完美算法,并希望读者能从此得到一些启发。 在开始此文前,希望读者能认同一点:在信息学乃至整个计算机科学领域,不一定绝对正确的算法就是最好的算法,有可能一个在绝大多数情况下正确的算法(非完美算法)比一个完全正确的算法更有前途。或者,由于它没有完全正确的算法考虑得全面,而使得它的空间或时间使用得较少;或者,由于它没有正确的算法那么严谨,使得编程实现时较容易;或者,由于所用的知识没有正确算法那么深奥,使得它更容易被接受。 二、非完美算法的一些基本方法 1.1 随机化贪心法 随机化贪心是目前用得较广泛的一种非完美算法。特别是对求较优解的题目,这种方法可以说是首选。 随机贪心,就是用随机与贪心结合,在算法的每一步,都尽量使决策取得优,但不一定是最优决策。通过多次运行,使得算法能取得一个较优的解。有时,由于决策的优劣判断较复杂,直接用多次随机也能得到较优的结果。 例:传染病控制 题目大意 给出一棵传染病传播树,其中根结点是被感染结点。每个时刻,被感染结点都会将传染病传播到它的子结点。但是,如果某时刻t切段A与其父结点B之间的边,则时刻t以后,传染病不会从B传染给A(即A不会患病)。 每个时刻,只能切断一条传播途径。问每个时刻怎样切段传播途径,使最少的人被感染。 说明 本题的标准算法是搜索。关于如何用搜索解决此题,请参见附件《传染病控制解题报告》,此解题报告由周戈林同学提供。 分析 显然,如果某个结点已被感染,则以后没有必要切断它与它的父结点之间的传播途径,因为这样和不切断没有区别(即切断已被感染的结点与其父结点之间的传播途径是无效的);如果在一个时刻,切断A与A的父结点之间的传播途径是有效的,切断B与B的父结点之间的传播途径也是有效的,同时,B是A的子孙结点,则切断A与A的父结点的传播途径优于切断B与B的父结点的传播途径。由于第t时刻被感染的显然只可能是前t层的。因此可得到,第t时刻切断的必然是第t层与第t+1层之间的传播途径。 本题可以用随机贪心来做。 根据经验,每次将一个结点数最多的子树从原树中切开,结果会比较好。但这样并不能适应所有情况,有时,选结点数第二多的或第三多的反而能使以后的最终结果要好一些。所以,可以多次贪心,每次都随机的选一个能切断的结点数较多的方案切(或者说每次使能切断的结点数多的方案数被切的几率大一些),这样,虽然大多数情况下其结果都比贪心要差,但只要随机到一定的数量,这中间出现正确答案的概率就很大了。 上面加概率的随机贪心有一点难处理的就是怎样设置每种情况被选择的概率。其实,对于此题,只要将每种情况被选到的概率都设成同样大(即被选中的概率与其子结点数无关)就可以了。这样,这种方法就变成了纯粹的随机法,这种方法也能使此题得到满分。 小结 随机贪心是信息学竞赛中的一个重要工具,由于一般情况下它都是基于简单的贪心,所以往往编程复杂性会比较低,同时运行的时间复杂度也会比较低。随机多次是随机贪心的一个重要手段,通过多次运行,

文档评论(0)

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

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

1亿VIP精品文档

相关文档