pascal贪心算法.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
贪心策略 当一个问题具有最优子结构时,一般我们会想到用动态规划法去解它,但是有些问题存在着更简单有效的方法,我们只要总是做出当前看来最好的选择就可以了。贪心算法所作的选择可以依赖于以往所作过的选择,但决不依赖于将来的选择,也不依赖于子问题的解,这使得算法在编码和执行的过程中都有着一定的速度优势。如果一个问题可以同时用几种方法解决,贪心算法应该是最好的选择之一。但是贪心算法并不是对所有的问题都能得到整体最优解或最理想的近似解,与有哪些信誉好的足球投注网站法等通法比较,它的适用区域相对狭窄许多,因此正确的分析、归纳、判断贪心法的应用是十分重要的。 同时我们也应该知道贪心是一种方法,而不是算法,贪心法的应用需要结合其他算法。通常而言,贪心策略需要结合排序算法。 【例 题】删数问题 【问题描述】 键盘输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的N 和S,寻找一种方案使得剩下的数字组成的新数最小。 输入数据均不需要判错。 输出应包括所去掉的数字的位置和组成的新的正整数。(N不超过240位) 【问题分析】 对于这道试题,我们可以采用这样一种解题方式:因为要删除S个数字,我们可以一个一个的删,每一次删除的目的都是使剩下的数尽量小。那么在每一次删除时,我们应该选择那个数字?最大的数字还是最左的数字?例如5768,通过观察可以知道删除7这个数字可以使剩余的数最小。通过思考可以得出结论,每一次删除的数字应该是这个数字序列中降序子序列最左边的数字。具体可以这样操作,按高位到低位的方向有哪些信誉好的足球投注网站递减区间。若不存在递减区间,则删尾数符;否则删递减区间的首数符,这样形成了一个新的数串。然后回到串首,重复上述规则,删下一数符…以此类推,直至删除S个数符为止。 例如:N=“8796542”,S=4删数过程如下: N=“8 7 9 6 5 4 2”{最左边的递减序列是87,删除“8”} “7 9 6 5 4 2”{最左边的递减序列是96542,删除9} “7 6 5 4 2”{最左边的递减序列是76542,删除“7”} “6 5 4 2”{最左边的递减序列是6542,删除“6”} “5 4 2” 【程序代码】 program delete; var i,j,k,s:integer; N:string; begin readln(n); readln(s); while s0 do begin I:=1; while (ilength(n)) and (n[i]=n[i+1]) do Inc(i); delete(n,I,1); dec(s); end; while (length(n)1 and (n[1]=‘0’) do delete(n,1,1); writeln(n); end. 【问题思考】 由例题可知,贪心算法的实现需要思考两个基本的问题:如何建立和方法的正确性。 如何建立。怎样从一个规模较小的解推出规模较大的解呢?拿这个例题来说,从数串5768删除2位数的模拟过程中推广到240位的数串删数过程。 方法的正确性。确保贪心算法确实是有效是使用贪心算法的关键所在。确定贪心算法是有效的,那么解决该问题在时间复杂度还是在空间的使用方面与其他方法想比较显得更为优势。以例题为例,删数方法是首先按高位到低位的方向有哪些信誉好的足球投注网站递减区间。若不存在递减区间,则删尾数符;否则删递减区间的首数符,这样形成了一个新的数串。这样获得的新数肯定是最小的新数。 对于上述例题,假如我们按照其他的删数过程是正确的,删除最左边的数或者每次删除最大的数。同样以5768为例。删除5得768,删除8得576,都不是最小的数值,假设不成立,证明这种方式是错误的,按照原先设定的方法所得到的解是最优解。 由上例可以获知,贪心的使用需要严格的证明,保证问题的严密性,贪心方法的使用还需呀结合其他算法的使用,例如:排序、模拟、搜素、枚举等等,但是一旦证明了贪心方法使用的正确性,程序的运行效率会大大提高。证明使用贪心方法的正确性依靠的是严密的数学头脑和以往的经验积累,假如不具备这些条件,使用该方法需要谨慎。 二.经典例题分析 1. 混合牛奶 (milk.pas USACO练习题) 【问题描述】 牛奶包装是一个如此低利润的生意,以至于尽可能低地控制初级产品(牛奶)的价格变得十分重要。请帮助Merry的牛奶制造公司(Merry Milk Makers)以尽可能最廉价的方式取得他们所需的牛奶。Merry的牛奶制造公司从一些农民那购买牛奶,每个农民卖给牛奶制造公司的价格不一定相同。而且,如一只母牛一天只能生产一定量的牛奶,农民每一天只有一定量的牛奶可以卖。每天,Merry的牛奶制造公司从每个农民那购买一定量的牛奶,少于或等于农民所能提供的最大值。现给出Me

文档评论(0)

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

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

1亿VIP精品文档

相关文档