硬币找零问题是指用最少的硬币找零n美分。您是否可以提供一组硬币面额,使得贪婪算法不能得出最优解?这个集合应该包括一美分,以便对于每个n都有解决方案。
好的,假设有 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 - 2
。 N, 1, 1, ..., 1 // greedy (N - 1 coins)
N-1, N-1 // optimal (2 coins)
N
变得更大。floor(X/2) + 2, floor(X/2), 1
。例如:X = 123,硬币将是:63、61、1。贪心解决方案将是:63 + 1 + 1 + ... + 1,而最优解决方案将是:61 + 61 + 1。 - mateleco关于@xenteros的评论,请参阅维基百科(在那里,你会发现一个例子):
对于所谓的经典硬币系统,如美国和许多其他国家使用的硬币系统,选择不大于剩余待做金额的最大面额硬币的贪心算法将产生最佳结果。但是,对于任意硬币系统来说,并非总是这样:如果硬币面额为1、3和4,则要制作6元,贪心算法会选择三枚硬币(4、1、1),而最优解是两枚硬币(3,3)。
一位顾客购买价值69美分的糖果,用1美元纸币支付,并需要找回31美分的零钱。
贪心算法将首先选择一个25美分的硬币,然后还需要再选6美分的硬币。没有5美分的硬币,只有4个1美分的硬币。因此,它无法找到正确的找零方式。可以使用动态规划找到正确的找零方式(3个10美分和1个1美分)。