贪心算法是一种算法,它在每一步都选择最优(在当前步骤内)变体,期望最终解决方案在全局意义上是最优的。
小例子:
假设我们有无限数量的不同面额的硬币,我们需要收集数量 S。让我们考虑两种具体情况,我们将尝试用贪心算法解决每种情况。
即,我们将采取以下行动:在每一步中,我们将取一枚面额最高的硬币(该步内的最佳选择),不超过剩余数量。
a) 设硬币面额为 1、5 和 10,S = 27。
1) 取 10, S: 27 -> 17
2) 取 10, S: 17 -> 7
3) 取 5, S: 7 -> 2
4)取1,S:2-> 1
5)取1,S:1-> 0
结果,他们得分了五个硬币的数量。您可以独立(例如,蛮力)确保对于 4 个或更少的硬币,您将无法获得 27 分。
b) 设硬币的面额为 1、5 和 7,S = 24。
1) 取 7, S: 24 -> 17
2) 取 7, S: 17 -> 10
3) 取 7, S: 10 -> 3
4) 取 1, S: 3 -> 2
5)取1,S:2-> 1
6)取1,S:1-> 0.
我们用六枚硬币得分,但可以用四枚硬币得分 S - 两枚面值为 7,两枚面值为 5。
从例子中可以看出,用贪心算法并不总是可以解决问题。但如果它导致一个整体最优答案,那么它通常会比使用动态规划或其他方法更容易。