硬币更换问题是使用最少数量的硬币进行n美分的更改。
你能给出一组硬币面额,贪婪算法不会产生最佳解决方案。该集应包括一分钱,以便每个n都有一个解决方案。
答案 0 :(得分:4)
好吧,给定10, 7, 1
个硬币改变15
:
15 = 10 + 1 + 1 + 1 + 1 + 1 // greedy (6 coins)
15 = 7 + 7 + 1 // optimal (3 coins)
您可以根据需要轻松生成贪婪的解决方案效率低下:
让可用的硬币为1
,N-1
,N
并尝试更改2 * N - 1
:
N, 1, 1, ..., 1 // greedy (N coins)
N-1, N-1, 1 // optimal (3 coins)
现在,让N
变大
答案 1 :(得分:2)
硬币: 1,5,8
金额: 10
贪心解决方案: 8,1,1(3个硬币)
最佳: 5,5(2个硬币)
要扩展@xenteros评论,请查看wikipedia(其中顺便说一下。你会找到一个例子):
对于所谓的典型硬币系统,如美国和美国使用的系统 许多其他国家,选择最大的贪婪算法 硬币面额不大于剩余金额 制作将产生最佳结果。事实并非如此 但是,任意硬币系统:如果硬币面额是1,3 4,然后做6,贪心算法会选择三个硬币 (4,1,1),而最优解是两个硬币(3,3)。
答案 2 :(得分:0)
当可用硬币数量有限时,贪婪算法将无法始终起作用。假设您的收银机中有以下物品:
一位顾客进来,买了价值69美分的糖果,用1美元的钞票付款,需要找零31美分。
贪婪算法将首先选择四分之一,然后需要再选择6美分。没有镍币,只有4便士。因此,它将找不到正确的更改。使用动态编程可以找到正确的变化(3角钱和1便士)。