欢迎来到天天文库
浏览记录
ID:37862057
大小:97.50 KB
页数:13页
时间:2019-06-01
《pascal贪心算法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、贪心策略当一个问题具有最优子结构时,一般我们会想到用动态规划法去解它,但是有些问题存在着更简单有效的方法,我们只要总是做出当前看来最好的选择就可以了。贪心算法所作的选择可以依赖于以往所作过的选择,但决不依赖于将来的选择,也不依赖于子问题的解,这使得算法在编码和执行的过程中都有着一定的速度优势。如果一个问题可以同时用几种方法解决,贪心算法应该是最好的选择之一。但是贪心算法并不是对所有的问题都能得到整体最优解或最理想的近似解,与搜索法等通法比较,它的适用区域相对狭窄许多,因此正确的分析、归纳、判断贪心法的应用是十分重要的。同时我们也应该知道贪心是一种方法,而不是算法,贪心法
2、的应用需要结合其他算法。通常而言,贪心策略需要结合排序算法。【例题】删数问题【问题描述】键盘输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小。输入数据均不需要判错。输出应包括所去掉的数字的位置和组成的新的正整数。(N不超过240位)【问题分析】对于这道试题,我们可以采用这样一种解题方式:因为要删除S个数字,我们可以一个一个的删,每一次删除的目的都是使剩下的数尽量小。那么在每一次删除时,我们应该选择那个数字?最大的数字还是最左的数字?例如5768,通过观察可以知道删除7
3、这个数字可以使剩余的数最小。通过思考可以得出结论,每一次删除的数字应该是这个数字序列中降序子序列最左边的数字。具体可以这样操作,按高位到低位的方向搜索递减区间。若不存在递减区间,则删尾数符;否则删递减区间的首数符,这样形成了一个新的数串。然后回到串首,重复上述规则,删下一数符…以此类推,直至删除S个数符为止。例如:N=“8796542”,S=4删数过程如下:N=“8796542”{最左边的递减序列是87,删除“8”}“796542”{最左边的递减序列是96542,删除9}“76542”{最左边的递减序列是76542,删除“7”}“6542”{最左边的递减序列是6542,
4、删除“6”}“542”【程序代码】programdelete;vari,j,k,s:integer;N:string;beginreadln(n);readln(s);whiles>0dobeginI:=1;while(i1and(n[1]=‘0’)dodelete(n,1,1);writeln(n);end.【问题思考】由例题可知,贪心算法的实现需要思考两个基本的问题:如何建立和方法的正确性。如何建立。怎样从一个规
5、模较小的解推出规模较大的解呢?拿这个例题来说,从数串5768删除2位数的模拟过程中推广到240位的数串删数过程。方法的正确性。确保贪心算法确实是有效是使用贪心算法的关键所在。确定贪心算法是有效的,那么解决该问题在时间复杂度还是在空间的使用方面与其他方法想比较显得更为优势。以例题为例,删数方法是首先按高位到低位的方向搜索递减区间。若不存在递减区间,则删尾数符;否则删递减区间的首数符,这样形成了一个新的数串。这样获得的新数肯定是最小的新数。对于上述例题,假如我们按照其他的删数过程是正确的,删除最左边的数或者每次删除最大的数。同样以5768为例。删除5得768,删除8得576
6、,都不是最小的数值,假设不成立,证明这种方式是错误的,按照原先设定的方法所得到的解是最优解。由上例可以获知,贪心的使用需要严格的证明,保证问题的严密性,贪心方法的使用还需呀结合其他算法的使用,例如:排序、模拟、搜素、枚举等等,但是一旦证明了贪心方法使用的正确性,程序的运行效率会大大提高。证明使用贪心方法的正确性依靠的是严密的数学头脑和以往的经验积累,假如不具备这些条件,使用该方法需要谨慎。二.经典例题分析1.混合牛奶(milk.pasUSACO练习题)【问题描述】牛奶包装是一个如此低利润的生意,以至于尽可能低地控制初级产品(牛奶)的价格变得十分重要。请帮助Merry的牛
7、奶制造公司(MerryMilkMakers')以尽可能最廉价的方式取得他们所需的牛奶。Merry的牛奶制造公司从一些农民那购买牛奶,每个农民卖给牛奶制造公司的价格不一定相同。而且,如一只母牛一天只能生产一定量的牛奶,农民每一天只有一定量的牛奶可以卖。每天,Merry的牛奶制造公司从每个农民那购买一定量的牛奶,少于或等于农民所能提供的最大值。现给出Merry牛奶制造公司的每日的牛奶需求,连同每个农民的可提供的牛奶量和每加仑的价格,请计算Merry的牛奶制造公司所要付出钱的最小值。注意:每天农民生产的牛奶的总数对Merry的牛奶制造公司来说是
此文档下载收益归作者所有