【问题标题】:Algorithm for finding all possible solutions to an equation寻找方程所有可能解的算法
【发布时间】:2016-08-04 00:21:12
【问题描述】:

我试图实现更改计数问题的变体(在算法中),它需要找到可以更改数量的不同方法的数量,经过多次推理,结果证明这是一个数学问题。例如,如果给定硬币 50, 20, 100,请找出改变 300 的方法的数量

问题是一个方程的形式

ax1 + bx2 + ... + kxn = y,  a, b, ..., k and y all known and > 0 

对于包括0在内的正整数集合,需要找到所有可能的解决方案。实际上我只需要解决方案的数量。 我通常会自己想出算法,但我不确定如何解决这个问题。

【问题讨论】:

  • 这不是函数式编程,您应该为此使用动态编程。类似的问题:en.wikipedia.org/wiki/Change-making_problem。你需要稍微改变一下算法来解决你的问题。此外,您真的需要列出所有可能的解决方案还是仅列出解决方案的数量?您的标题说您需要列出所有内容,但在问题中您说您只需要解决方案的数量。请澄清。
  • 如果您对此的数学方面感兴趣,“Polya,如何解决它”有一个很好的讨论。有关使用 Polya 方法的代码示例,请参阅 stackoverflow.com/a/20743780/1400793
  • @justhalf 很抱歉造成混乱。首先,我想用函数式编程语言来实现它。其次,这个问题只需要解决方案的数量,但我想列出解决方案。
  • 我正在学习 Martin Odersky 的函数式编程课程,还没有介绍循环。所以这个问题只能用递归来解决。
  • @theking 啊,我明白了。然后我认为您需要重新表述问题以表明您想在函数式编程中执行此操作。也就是说,我认为如果你能展示一些这样做的尝试会更好(见stackoverflow.com/help/how-to-ask)。关于列出解决方案,通常比仅获取解决方案的数量需要更多的努力,所以也许您会说“任务是获取解决方案的数量。但如果可能的话,我也有兴趣查看解决方案列表。” ,从而将“列出解决方案”作为附加点,因为它需要不同的解决方案。

标签: algorithm combinations


【解决方案1】:

这是一个经典的动态规划问题。

a[x] 是您可以使用可用硬币支付 x 的方式数。

a[0]=1 因为支付 0 的唯一方法就是不给任何硬币。

你通过添加硬币来建立它。对于每个硬币,您需要迭代感兴趣的范围 (0-300) 并计算 a[x] = a[x] + a[x - coin](如果 x>=coin)。

当你完成所有硬币a[x] 将是你想要的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多