【问题标题】:Determine the optimal combination of coins for a dollar amount确定一美元的硬币的最佳组合
【发布时间】:2010-10-08 23:34:32
【问题描述】:

我需要找到构成一定金额的硬币的最佳组合。所以本质上,我想用最少的硬币到达那里。

例如:

如果货币系统有硬币:{13, 8, 1},贪心解决方案会将 24 的零钱变为 {13, 8, 1, 1, 1},但真正的最优解决方案是 {8, 8 , 8}.

我希望用 Javascript 编写此代码,但伪代码很好,因为我确信这会帮助更多人。

【问题讨论】:

标签: javascript math numbers pseudocode mathematical-optimization


【解决方案1】:

一般来说,问题实际上是 NP 完全的(请参阅 Change-making problem)。但是,对于很多货币系统(包括美国系统的 {1, 5, 10, 25} ),贪心算法也恰好是最优的。

【讨论】:

    【解决方案2】:

    这个问题叫动态规划

    基本的伪代码应该是这样的:

    • C(n) 为用于和 n 的最小硬币数。
    • 在每个递归步骤中,找到下一个最大值硬币 c,并选择 C(n) 为:
    • C(n-c)+1(使用所述硬币,更新使用的总硬币,以及剩余值)和C(n)(不是使用硬币) - 在这两种情况下,从可用硬币列表中删除 c 以进行下一次迭代。

    请注意,此算法适用于您所指的一般情况。对于任何其他硬币系统,每个硬币都是其后一个硬币的除数(世界上大多数硬币系统) - 贪婪解决方案是最简单的,也是最优的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-19
      • 2010-11-09
      • 2015-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      相关资源
      最近更新 更多