算法设计与分析之贪心法

目录(?)[-]

  1. 贪心算法
    1. 贪心选择性质
    2. 经典问题

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

比如每次给你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


你可能感兴趣的:(专业,算法设计与分析)