贪心算法中“贪心”二字形象的说明了该算法的基本思想:贪心(每一步选择都是眼下的局部最优选择)。
比如每次给你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)最优三角剖分
之前写的博客:
PS:贪心算法比较容易理解,写的比较简略,后续有想法再补充。
转载本文请注明作者和出处
作者 :JarvisChu