贪心

概念

贪心算法在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,它所做出的是在某种意义上的局部最优解。所以贪心就避免了为求得整体最优解而枚举各种方案所耗费的时间。

注意

  1. 不能保证贪心所得出的解是整体最优的
  2. 不能用来求最大解和最小解问题
  3. 只能求满足某些约束条件的可行解的范围

举例

找零钱问题:商品价格为m元,给了n元,需找零(n - m)元,现有人民币数额为1角、2角、5角、1元、2元、5元、10元、20元、50元、100元,要求使用的人民币张数最少。

  • 思路
    将所有金额及其被使用的张数存入集合中,从大到小遍历集合,若金额恰好小于找零,则该金额张数加一,找零减去对应金额。
  • 代码
public static Set<Entry<Double, Integer>> function(double m, double n) {
    double d = n - m;
    TreeMap<Double, Integer> rmbMap = new TreeMap<Double, Integer>();
    rmbMap.put(100.0, 0);
    rmbMap.put(50.0, 0);
    rmbMap.put(20.0, 0);
    rmbMap.put(10.0, 0);
    rmbMap.put(5.0, 0);
    rmbMap.put(2.0, 0);
    rmbMap.put(1.0, 0);
    rmbMap.put(0.5, 0);
    rmbMap.put(0.2, 0);
    rmbMap.put(0.1, 0);

    while (d >= 0.1) {
        rmbMap.put(rmbMap.floorKey(d), rmbMap.get(rmbMap.floorKey(d)) + 1);
        d -= rmbMap.floorKey(d);
    }

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

推荐阅读更多精彩内容

  • 贪心算法 贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上...
    fredal阅读 9,279评论 3 52
  • 前言 贪心是人类自带的能力,贪心算法是在贪心决策上进行统筹规划的统称。 比如一道常见的算法笔试题----跳一跳: ...
    落影loyinglin阅读 41,892评论 11 84
  • 1.简介、思路和特性 1.1 简介 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。...
    王侦阅读 472评论 0 0
  • 我记忆中的童年 没有田地 没有山海 有的是数不清楚的三无食品和残缺的玻璃球 还有那本经常被妈妈撕的作业簿 童年里走...
    ONLY4度阅读 310评论 0 0
  • 午饭喂饱肚子后,感觉困神袭来,慵懒的不愿活动,双眼打架频率增加,大脑也想努力的睁开眼睛,但是无济于是。 本人血糖高...
    峰霞仙子阅读 304评论 2 4