用于计算具有特定值的倍数的和的算法

时间:2017-11-05 04:39:50

标签: algorithm

我试图使用数字子集的倍数计算该总和的已知总和或最接近的值。在这种方法中,我想最小化倍数或系数。

例如,如果我有号码120并且我有一组50s20s,我会得到

120 = 2*50 + 1*20. 

但是,这组数字可能有限,所以如果我只有1x506x20s,我会得到

120 = 6*20. 

此外,如果我只有5x20s,因为我想最小化系数,我会

110 = 1*50 + 3*20. 

请注意,在这种情况下,该值是与总和最接近的值。如果可以实现总和,则优先于具有较少倍数的总和的最接近的值。

是否有已知的算法来实现此结果?

1 个答案:

答案 0 :(得分:0)

您寻求的算法通常被称为“贪婪”。算法。您可以在这里阅读理论及其工作原理:Cut optimisation algorithm

与您的特定请求类似的常见用例是制造中使用的剪切长度优化。查看这篇讨论该问题的维基百科文章,以及所需优化算法背后的微积分:https://en.m.wikipedia.org/wiki/Cutting_stock_problem

有关此操作的示例,请使用脚本算法作为宏来试用此电子表格:http://www.cutoptimizer.com