zoukankan      html  css  js  c++  java
  • 贪心算法-极易理解篇

    参考链接:https://zhuanlan.zhihu.com/p/76164082?ivk_sa=1024320u,非常棒!!!

    图片前引:

                                

                             

     假设一个问题比较复杂,暂时找不到全局最优解,那么我们可以考虑把原问题拆成几个小问题(分而治之思想),分别求每个小问题的最优解,再把这些“局部最优解”叠起来,就“当作”整个问题的最优解了。

                                

    贪心算法的三步走!

      第一步:明确到底什么是最优解?明确下来之后用小本本记下来!

           第二步:明确什么是子问题的最优解?再用小本本记下来!

           第三步:分别求出子问题的最优解再堆叠出全局最优解?这步不用记!

            就是这么简单!

    示例:0-1背包问题

    有一个背包,最多能承载150斤的重量,现在有7个物品,重量分别为[35, 30, 60, 50, 40, 10, 25],它们的价值分别为[10, 40, 30, 50, 35, 40, 30],,阿广,如果是你的话,应该如何选择才能使得我们的背包背走最多价值的物品?

    按照刚才说的步骤实操一下吧!

    第一步,明确到底什么是最优解?

                               

    第二步,明确什么是子问题的最优解?再用小本本记下来!

                                   

    第三步,分别求出子问题的最优解再堆叠出全局最优解?

    按照制订的规则(价值)进行计算,顺序是:4 2 6 5 。

    最终的总重量是:130。

    最终的总价值是:165。

     

                                

    按照制订的规则(重量)进行计算,顺序是:6 7 2 1 5 。

    最终的总重量是:140。

    最终的总价值是:155。

    可以看到,重量优先是没有价值优先的策略更好。

     

                               

    按照制订的规则(单位密度)进行计算,顺序是:6 2 7 4 1。

    最终的总重量是:150。

    最终的总价值是:170。

    可以看到,单位密度这个策略比之前的价值策略和重量策略都要好。

                      

    贪心算法三个核心问题!!!

              

    是的,阿广,你说的基本意思正确!

    下面我总结一下使用贪心算法的前提:

    1、原问题复杂度过高;

    2、求全局最优解的数学模型难以建立;

    3、求全局最优解的计算量过大;

    4、没有太大必要一定要求出全局最优解,“比较优”就可以。

    那么几乎99.99999999999%就要使用贪心算法的思想来解决问题。

                        

    按串行任务分:时间串行的任务,按子任务来分解,即每一步都是在前一步的基础上再选择当前的最优解。

    按规模递减分:规模较大的复杂问题,可以借助递归思想(见第2课),分解成一个规模小一点点的问题,循环解决,当最后一步的求解完成后就得到了所谓的“全局最优解”。

    按并行任务分:这种问题的任务不分先后,可能是并行的,可以分别求解后,再按一定的规则(比如某种配比公式)将其组合后得到最终解。

     

                               

    成本

    耗费多少资源,花掉多少编程时间。

    速度

    计算量是否过大,计算速度能否满足要求。

    价值

    得到了最优解与次优解是否真的有那么大的差别,还是说差别可以忽略。

     

  • 相关阅读:
    消息中间件(一)MQ详解及四大MQ比较
    SIP协议
    PAT (Basic Level) Practice 1008 数组元素循环右移问题
    LeetCode-Algorithms 1. 两数之和
    PAT (Basic Level) Practice 1040 有几个PAT
    PAT (Basic Level) Practice 1023 组个最小数
    PAT (Basic Level) Practice 1021 个位数统计
    PAT (Basic Level) Practice 1007 素数对猜想
    PAT (Basic Level) Practice 1006 换个格式输出整数
    PAT (Basic Level) Practice 1004 成绩排名
  • 原文地址:https://www.cnblogs.com/hjh-666/p/15400264.html
Copyright © 2011-2022 走看看