在给定一组硬币的情况下,如何以最佳方式达到给定金额?
让我们说在这种情况下,我们有随机数的1,5,10,20和50美分硬币,最大的硬币优先。
我的第一个直觉是使用所有可能适合的最大硬币,然后如果超过总和则用完下一个最小的硬币。
这种做法是否存在任何不足之处?有没有更有效的方法?
答案 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以获得更多说明。