zoukankan      html  css  js  c++  java
  • 算法入门5:贪心算法

    贪心算法中“贪心”二字形象的说明了该算法的基本思想:贪心(每一步选择都是眼下的局部最优选择)。

    比如每次给你1张面额不定的纸币,共10次,你这么选?肯定是每次都要一张100元的。当你要拿第一张时,此时眼下最优的选择就是拿一张100的,不会管拿了之后会不会对后面的9张产生影响。这就是一种贪心,当然这种情况下的贪心选择也是最优的选择,因为局部最优导致了整体的最优。

    贪心算法常用于求解最优解问题,比动态规划思路简单,前提是要求问题满足贪心选择性质。

    形象的讲:

    贪心算法的每次选择就是只看当前的利益,不管当前的选择对后面选择的影响,所以如果当前的选择对之后的选择有影响时,这种选择就不一定最优了。

    动态规划就是三思而后行,在考虑当前选择能产生的各种结果中选择一个最优的,想得多速度也就慢了。

    比如上面的例子,如果规定超过2张100,后面每张就都只会给1元的,那么按照贪心选择依然会前两张选择100的,后面就只能拿1元的,总共208元。按照动态规划,则会聪明的先选一张100元,后面每次都选择50元,总共550元。

    贪心算法

        贪心算法思想简单,应用场合也广泛。

       使用贪心算法,问题必须满足最优子结构性质和贪心选择性质。

    贪心选择性质

       问题的全局最优解是通过局部最优选择得到的。

    经典问题

    (1)背包问题(物体可切分时的0-1背包问题)

    (2)Huffman编码

    (3)单源最短路径

    (4)Prim算法

    (5)Kruskal算法

    (6)最优三角剖分

    之前写的博客:

    Prim算法

    理解动态规划算法与贪心算法区别----找钱问题

    PS:贪心算法比较容易理解,写的比较简略,后续有想法再补充。

    转载本文请注明作者和出处

    作者 :JarvisChu

    出处:http://blog.csdn.NET/jarvischu

  • 相关阅读:
    DSP 知识点
    JVM中的垃圾收集
    MyBatis中的命名空间namespace的作用
    Gradle各版本下载地址
    redis学习笔记
    Mybaties 的缓存
    zookeeper配置集群报错Mode: standalone
    ZooKeeper 典型应用场景
    Linux下搭建mongDB环境
    关系型数据库三范式
  • 原文地址:https://www.cnblogs.com/aabbcc/p/6504542.html
Copyright © 2011-2022 走看看