- 1、本文档共65页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
从贪心到动规
邓 东
什么是贪婪问题
什么是贪婪问题
• 顾名思义,就是贪婪地对问题进行决策,
在每一个选择面前,寻找当前看起来是最
优的一项决策来继续,这样下去,直到达
到最终状态,举一个直观的例子。
什么是贪婪问题
什么是贪婪问题
• Exam 01 :从文件输入一个高精度正整数
N,去掉其中任意S个数后剩下的数字按原
左右次序将组成一个新的正整数。编程对
给定的N和S,寻找一种方案使得剩下的数
字组成最小的新数。
• 输出得到的新正整数(N不超过240位)。
什么是贪婪问题
什么是贪婪问题
• 在对问题求解时,总是作出在当前看来是
最好的选择。也就是说,不从整体上加以
考虑,它所作出的仅仅是在某种意义上的
局部最优解(是否是全局最优,需要证
明)。
特别说明:
若要用贪心算法求解某问题的整
体最优解,必须首先证明贪心思
想在该问题的应用结果就是最优
解!!
2014-1-22 5
回到 Exam 01
• 从文件输入一个高精度正整数N,去掉其中任意S
个数后剩下的数字按原左右次序将组成一个新的
正整数。编程对给定的N和S,寻找一种方案使得
剩下的数字组成最小的新数。
• 输出得到的新正整数(N不超过240位)。
• 输入:两个整数N,S(H-precision.in)
输出:新的整数(H-precision.out)
输入: 输出:
2018 1
2
问题分析
• 在位数固定的前提下,让高位的数字尽量
小,其值就较小,依据此贪婪策略就可以
解决这个问题。
• 如何解决这一问题呢?总目标是删除高位
较大的具体数字,比较相邻两位数字,若
高位比低位大则删除高位。
我们看一个实例
• N=“231183” S=3
• 3 比1大删除 “2 1183”
• 2 比1大删除 “ 1183”
• 8 比3大删除 “ 11 3”
• 由此看出,当第i位删除后,必须考虑第i-1
和i+1位的比较情况,才能保证结果正确。
• 还要考虑,若最后结果中高位含0,如样例,
那应将高位的0全部去除。若结果全0,应
保留最后一个。
实 例 分 析
2014-1-22 9
一、事件序列问题
一、事件序列问题
已知N个事件的发生时刻和结束时刻(见下表,
表中事件已按结束时刻升序排序)。一些在时间上
没有重叠的事件,可以构成一个事件序列,如事件
{2,8,10}。事件序列包含的事件数目,称为该事
件序列的长度。请编程找出一个最长的事件序列。
事件编号 0 1 2 3 4 5 6 7 8 9 10 11
发生时刻 1 3 0 3 2 5 6 4 10 8 15 15
结束时刻 3 4 7 8 9 10 12 14 15 18 19 20
文档评论(0)