最优的硬币适合给定的金额

时间:2012-10-01 04:59:01

标签: algorithm combinations

在给定一组硬币的情况下,如何以最佳方式达到给定金额?

让我们说在这种情况下,我们有随机数的1,5,10,20和50美分硬币,最大的硬币优先。

我的第一个直觉是使用所有可能适合的最大硬币,然后如果超过总和则用完下一个最小的硬币。

这种做法是否存在任何不足之处?有没有更有效的方法?

3 个答案:

答案 0 :(得分:8)

首先简单地发放最大的硬币是不足之处。

假设您的自动售货机不在每个硬币中,除了50c,20c和1c硬币各20个,你必须提供60c的变化。

“优先级最大”(或贪婪)计划将为您提供11个硬币,1个50c硬币和10个1c硬币。

更好的解决方案是三个20c硬币。

贪婪方案只为您提供本地最佳解决方案。对于全局最优,您通常需要检查所有可能性(尽管可能存在极小极大型算法以减少搜索空间),以确保提供更改通常完全在可计算性范围内。

答案 1 :(得分:3)

Greedy Algorithms(您现在正在做的事情)通常被选择用于此类事物并实现为Final State Machines以用于自动售货机(针对此特定情况)。

  

贪婪算法确定要提供的最小硬币数量   在做出改变的同时这些是人类将要模仿的步骤   一个贪婪的算法

答案 2 :(得分:0)

每次使用最大面额的假设不是最好的解决方案。例如:

Input: coins[] = {25, 10, 5}, V = 30
Output: Minimum 2 coins required
We can use one coin of 25 cents and one of 5 cents 

Input: coins[] = {9, 6, 5, 1}, V = 11
Output: Minimum 2 coins required
We can use one coin of 6 cents and 1 coin of 5 cents (min)
As per logic of exhausting largest coins first, we would end up with one
coin of 9 cents and 2 coins of 1 cent

请参阅this answer以获得更多说明。