所以我和一些同事谈过,我目前面临的问题实际上是相当具有挑战性的。这个问题背后的背景与质谱和软件给出的不同峰的结构有关。在
但要把它分解成一个优化问题,我有一定的目标值。我也有各种输入的列表,我希望它们的总和尽可能接近目标。在
作为一个例子,这里是我所拥有的。
List of inputs: [18.01, 42.01, 132.04, 162.05, 203.08, 176.03]
Target value: 1800.71
我想找出所有可能的输入组合,它们的和在1800.71的0.5以内。所以总和可以在1800.21到1801.21之间。在
我已经知道有两个输入可以是:
^{pr2}$以及
^{3}$我不想找到使我尽可能接近目标值的组合;我对目标值0.5以内的所有可能的组合感兴趣。在
如果有人能帮我解决这个问题,我将不胜感激!在
我实现了一个递归来获取输入列表中所有值的组合,该组合的总和在阈值范围内。输出在list
out
(和与组合列表的元组)中。我没有把它全部打印出来,因为它太大了)。在印刷品:
^{pr2}$编辑:过滤掉重复项。在
与其允许多个值,不如为每个值计算一个整数因子。在
对于你的问题,我得到了988个结果。在
^{pr2}$我还在Rust中重新实现了相同的算法。在
在您的问题上的表现:
代码如下:
而且,只是为了好玩,这些都是你问题的确切解决方案。一共有5个。在
另一个与现有的好答案相同的答案。我发现使用范围而不是目标+公差更简单,并且使用一个简单的(未优化的)递归解决方案,这似乎足够快速地找到您的用例的大约1000个答案。在
更改为使用生成器/产量或优化单值情况并不会改变所有结果所需的时间,尽管如果有管道,则可能会发现这很有用。在
即使如此,在Python2.7和3.6中也需要大约100ms的时间
^{pr2}$例如:用法:
相关问题 更多 >
编程相关推荐