贪心法从问题的某一个初始空解出发,采用逐步构造最优解的方法向给定的目标前进,每一步决策产生n元组解(x0,x1,…,xn-1)的一个分量。每一步用作决策依据的选择准则被称为最优量度标准(或贪心准则),也就是说,在选择接分量的过程中,添加新的解分量后,形成的部分解(x0,x1,…,xk)不违反可行解约束条件。每一次贪心选择都将所求问题简化为规模跟小的子问题,并期望通过每次所作的局部最优选择产生出一个全局最优解。
用贪心法求解问题的基本思路如下:
(1)? 建立数学模型来描述问题。
(2) 把求解的问题分为若干个子问题。
(3)? 对每一个子问题求解,得到子问题的局部最优解。
(4)? 把子问题的局部最优解合成原来解问题的一个解。
删数问题:给定共有n位的正整数d,去掉其中任意k(k<=n)个数字后剩下的数字按原次序排列组成一个新的正整数。对于给定的n位正整数d和正整数k,找出剩下数字组成的新数最小的删数方案。
采用贪心法求解,按高位到低位的方向搜索递减区间,若不存在递减区间,则删除尾数字,否则删除递减区间的首数字,这样形成一个新书串,然后回到串首,重复上述规则,删除下一个数字,直到删除k个数字为止。
例如,d = 5004321,转换为数字串a[]
= “1234005”(从a[0]到a[6]为高位到低位),从a[0](最高位)开始找到递增区间[5](注意这里数字串a的顺序与d的顺序相反),删除5;找到递增区间[400],删除4;再找到递增区间[3],删除3,得到[1200],再删除前导0得到[12],转换为整数后是21。