algorithm - 最适合给定金额的硬币

标签 algorithm combinations

给定一组硬币,您将如何以最佳方式达到给定的总和?

假设在这种情况下,我们有 1、5、10、20 和 50 美分硬币的随机数,其中最大的硬币获得优先权。

我的第一直觉是使用所有可能的最大硬币来装,然后如果超过总和则用完值(value)次小的硬币。

这种方法行得通吗?这种方法有什么缺点吗?有没有更有效的方法?

最佳答案

简单地先分发最大的硬币是有缺陷的。

假设您的自动售货机除了 50 美分、20 美分和 1 美分的硬币各有 20 枚外,所有硬币都卖光了,您必须提供 60 美分的零钱。

“优先最大”(或贪心)方案会给你 11 个硬币,1 个 50c 硬币和 10 个 1c 硬币。

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

贪婪方案只会为您提供局部最优解。对于全局最优,您通常需要检查所有可能性(尽管可能有最小最大类型的算法来减少搜索空间)以确定对于交付变化而言,哪些可能性通常完全在可计算性的范围内。

关于algorithm - 最适合给定金额的硬币,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12667721/

相关文章:

algorithm - 如何生成具有所需概率的随机数?

java - 如果函数不是递归的,while 可以用 if 代替吗?

python - 在 python 中使用组合对象

c++ - 在 C++ 中使用暴力生成所有组合

python - Python中的递归组合字符串搜索

algorithm - 设计一个实时保持前k个频繁词的系统

arrays - 在数字序列的末尾查找重复序列

c - 程序从给定字符串中删除所有连续的相同字母

python - 将一组组合合并成一个更大的集合(反向组合)

python - 返回 Python 中数字列表的不同乘法组合