贪婪算法何时可以解决硬币兑换问题?


24

给定一组具有不同面额和值v的硬币,您希望找到代表值v所需的最少数量的硬币。c1,...,cn

例如,对于硬币集1,5,10,20,这给2和6的硬币和6和19的硬币。

我的主要问题是:何时可以使用贪婪策略解决此问题?


优点:这句话显然是不正确的吗?(摘自:如何分辨贪婪算法是否足以解决最小硬币找零问题?

但是,本文证明,如果贪婪算法适用于第一个最大定理值和第二个最大定理值,那么它将适用于所有第一个定理值,并且建议仅使用贪婪算法与最佳DP算法进行检查。 http://www.cs.cornell.edu/~kozen/papers/change.pdf

附言 请注意,该线程中的答案令人难以置信-这就是为什么我再次提出这个问题。


对于二进制背包问题,有一个易于制定的准则:如果对于所有面额则贪心算法可以解决该问题。硬币更换不是那么容易(带有任意整数变量的背包)。您是否需要对Magazine,Nemhauser和Trotter进行展览?ci>Σj=1i1cj
德米特里·丘巴罗夫

2
Dexter Kozen在论文中的陈述说,如果贪心算法与所有的最优值一致,那么它将为任意给出最优解。我认为这句话没有错。 vv<cn1+cnv
德米特里·丘巴罗夫

@Dmitri Chubarov谢谢,现在我了解了奖金q的工作原理。类似于强烈的归纳法吗?至于您的其他问题,我想要一个给出解决方案,最好是证明的答案。
Unfun Cat

我将回答这个问题,如果没有人参与,请在周末用一些示例总结MNT。
德米特里·丘巴罗夫

参见这个相关问题 ; 特别是,Shallit撰写的链接论文可能会很有趣。
拉斐尔

Answers:


13

如果由贪婪算法改变而给出的硬币数量对于所有数量都是最佳的,则硬币系统是规范的。

论文D. Pearson。解决变化问题的多项式时间算法。Operations Reseach Letters,33(3):231-234,2005年提供了一种算法,用于确定硬币系统是否规范,其中是不同种类的硬币的数量。从摘要:nO(n3)n

然后,我们得出一组可能的值,该值必须包含最小的反例。每个函数都可以用算术运算进行测试,从而得出算法。O n O n 3O(n2)O(n)O(n3)

这篇论文很短。

对于非规范的硬币系统,贪婪算法会产生数量次优的硬币,其数量为;被称为反例。如果最小的反例大于最大的单个硬币,则该硬币系统是紧密的çcc

纸张规范钱币系统变化决策问题提供了多达五个硬币的硬币系统的充分必要条件是规范的,和一个用于决定的紧密硬币系统是否算法硬币是规范的。nO(n2)n

这个安全问题上也有一些讨论。


谢谢。我看到这个问题比我想象的要复杂得多-我猜这就是为什么您没有发布实际标准?我的想法“如果所有硬币都是彼此的整数倍,那么贪婪算法将得出最佳结果”显然太简单了。
Unfun Cat 2012年

我之所以没有发布实际标准,是因为我不记得是附属的东西,也没有时间重新阅读该论文。当然,您应该随时编辑我的答案。
Mark Dominus 2012年

我几次阅读了答案和文章,但找不到人为理解的标准canonical coin system。如果您可以添加示例,那就太好了,即如何测试建议的系统1,5,10,20
The Godfather
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.