[讲稿]贪心算法实例
贪心算法
一、贪心法的思想
在实际问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
中,经常会遇到求一个问题的最优解,这就是所谓的最优化问题。最优化问题往往包含一
组限制条件和一个优化
函数
excel方差函数excelsd函数已知函数 2 f x m x mx m 2 1 4 2拉格朗日函数pdf函数公式下载
,符合条件的解决方案称为可行解,使优化函数取得最佳值的可行解称为最优解。
贪心法是求解这类问题的一种常用算法,它的思想和做法是这样:从问题的某一个初始解出发,采用
逐步构造(迄今为止)最优解的方法向给定的目标前进。在每个局部阶段,都做出一个看上去最优的决策
(即某种意义下的、或某个
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
下的局部最优解),并期望通过每次所做的局部最优选择,能够产生出一
个全局最优解来。做出贪心决策的依据称为贪心准则(策略)。贪心与递推不同的是,推进的每一步不是依据某一固定的递推公式,而是做一个当时看似最佳的贪心选择,从而不断地将问题实例归纳为更小的相似子问题。在有些最优化问题中,采用贪心法求解不能保证一定得到最优解,这时可以采取一些变形的贪心法或其他解决最优化问题的方法(如动态
规划
污水管网监理规划下载职业规划大学生职业规划个人职业规划职业规划论文
方法)。下面我们通过几个应用实例来看看贪心法的应用。
二、应用举例
删数问题 【例3】
通过键盘输入一个高精度的正整数n(n的有效位数?240),去掉其中任意s个数字后,剩下的数字按
原左右次序将组成一个新的正整数。编程对给定的n 和s,寻找一种方案,使得剩下的数字组成的新数小。
输入:n
s
输出:最后剩下的最小数
【样例输入】
178543
S=4
【样例输出】
13
【问题分析】
由于正整数n的有效位数最大可达240位,所以可以采用字符串类型来存储n。那么,应如何来确定该删除哪s位呢,是不是只要删掉最大的s个数字就可以了呢,为了尽可能地逼近目标,我们选取的贪心策略为:每一步总是选择一个使剩下的数最小的数字删去,即按高位到低位的顺序搜索,若各位数字递增,则删除最后一个数字,否则删除第一个递减区间的首字符。然后回到串首,按上述规则再删除下一个数字。
重复以上过程s次,剩下的数字串便是问题的解了。例如:对n=178543,s=4,删数的过程如下:
n=178543 {删掉8}
n=17543 {删掉7}
n=1543 {删掉5}
n=143 {删掉4}
n=13 {解为13}
这样,删数问题就与如何寻找递减区间首字符这样一个简单的问题对应起来了。要注意一个细节问题:
可能会出现字符串首部有若干个0(甚至整个字符串都是0)的情况。按以上贪__心策略编制的程序框架如下:
输入s, n;
while s > 0 do
begin
i:=1; {从串首开始找}
while (i < length(n)) and (n[i]
1) and (n[1]=‘0’) do delete(n,1,1); {删去串首可能产生的无用零}