贪心法求解删数问题

贪心法从问题的某一个初始空解出发,采用逐步构造最优解的方法向给定的目标前进,每一步决策产生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。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容