为什么贪心不会能够得到全局最优解,给我举个例子
时间: 2023-07-10 19:20:36 浏览: 228
好的,下面举一个例子来说明贪心算法不能保证得到全局最优解的情况。
假设现在有一组硬币,面值分别为1元、3元和4元,现在需要用最少的硬币凑出11元。如果我们使用贪心算法,每次尽量选择面值最大的硬币,那么在第一步我们会选择面值为4元的硬币,此时剩余需要凑出的金额为7元。然后我们再次选择面值为4元的硬币,此时剩余需要凑出的金额为3元。最后我们只能选择面值为3元的硬币,这样总共需要使用的硬币数就是3个。
但实际上,最优解应该是使用3个面值为1元的硬币,因为这样总共只需要使用3个硬币就可以凑出11元了。这个例子说明,贪心算法不能保证总是能够得到全局最优解。
相关问题
给我在举个例子,为什么贪心不会能够得到全局最优解
贪心算法是一种贪心策略的算法,它在每一步选择中都采取当前状态下最优的选择,从而希望导致全局最优解。但是,贪心算法并不总能得到全局最优解,因为它不能回溯和修改已经做出的选择。
举个例子,假设有一个背包问题,有一组物品,每个物品有自己的价值和重量,需要将其中一些物品放入一个容量为C的背包中,使得背包中物品的总价值最大。如果我们采用贪心算法,每次选择重量最小的物品,一直放到背包中无法再放置为止。但是,这种方法并不一定能够得到最优解,因为价值更高的物品可能比重量更小的物品更有价值。因此,这种方法可能会导致最终结果比全局最优解差。
硬币兑换证明贪心算法是否是最优解
硬币兑换问题是一个经典的贪心算法问题。贪心算法的思想是每次选择当前最优解,以期望最终得到全局最优解。对于硬币兑换问题,我们可以采用以下贪心策略:
1. 优先选择面值最大的硬币,直到无法再选为止。
2. 如果当前面值无法选,则选择下一个面值最大的硬币。
证明这个贪心策略的正确性,我们需要证明贪心策略产生的解一定是最优解。我们可以采用反证法来证明。
假设存在一个最优解,它的硬币组合不同于贪心策略产生的硬币组合。我们可以将这个最优解分为两部分:第一部分是与贪心策略相同的硬币组合,第二部分是不同于贪心策略的硬币组合。
我们可以发现,第一部分的硬币组合一定是最优解,因为它与贪心策略相同,而贪心策略是每次选择当前最优解。因此,第一部分的硬币组合一定是最优解。
对于第二部分的硬币组合,我们可以发现,它的总面值一定小于等于贪心策略产生的硬币组合的总面值。因为贪心策略是每次选择当前最优解,而第二部分的硬币组合不同于贪心策略,因此它的总面值一定小于等于贪心策略产生的硬币组合的总面值。
因此,我们可以得出结论:贪心策略产生的硬币组合一定是最优解。
以下是一个Python实现的例子:
```python
def coin_change(coins, amount):
coins.sort(reverse=True) # 按面值从大到小排序
res = 0
for coin in coins:
if amount >= coin:
res += amount // coin
amount %= coin
return res if amount == 0 else -1 # 如果无法兑换,则返回-1
coins = [25, 10, 5, 1]
amount = 41
print(coin_change(coins, amount)) # 输出:5
```
阅读全文