贪心算法是一种用于优化问题的简单、直观的算法。该算法在寻找整体最优解的过程中,每一步都进行最优选择。贪心算法在一些问题上是非常成功的,例如用于压缩数据的霍夫曼编码,或者用于通过图寻找最短路径的Dijkstra算法。然而,在许多问题中,贪婪策略并不能产生最优解。
例如,在下面的动画中,贪心算法寻找和最大的路径。它通过在每个步骤中选择最大的可用数量来实现这一点。然而,贪心算法不能找到最大的和,因为它只根据每一步的信息做出决策,而不考虑整体问题。
贪心算法以达到最大和为目标,在每一步都会选择看起来是最优的即时选择,所以在第二步会选择12而不是3,不会得到包含99的最优解
贪心算法
贪心算法的结构
贪心算法获取特定问题中的所有数据,然后设置规则,在算法的每个步骤中为其中的元素添加到解决方案中。在上面的动画中,数据集是图中的所有数字,规则是在图的每一层选择可用的最大数字。算法构建的解是所有这些选项的和。
如果下面两个属性都为真,则可以使用贪心算法来解决这个问题。
贪心选择属性:通过每一步的最优选择,可以得到全局(全局)最优解。
最优子结构:如果整个问题的最优解包含子问题的最优解,则问题具有最优子结构。