我一直在尝试用PHP构造一个算法,在某些方面类似于一个子集和问题,但在这种情况下,我不寻找精确匹配,只寻找最接近的匹配,因为在大多数情况下不太可能有精确匹配。
让我再详细解释一下。假设我拥有各种假设性投资,需要从现有投资中筹集总和X。假设X=40000。
输入数组为(4500、8750、12900),每个保持的数目为(8、10、10)。
现在,我可以直观地计算出4500*8=36000,12900*3=38700,但更接近的匹配是(4500*6)+12900=39900。
我很快发现,尝试循环遍历每个可能的组合会快速创建一百万个可能的数组中的10个,如果添加了额外的输入,则会创建更多的数组如果这只是为了我自己的目的,但对于一个web应用程序来说是不可行的,那就不是问题了。
我没有要求任何人为我写代码。我不是数学家,所以我只是想知道是否有不同的方法可以解决这个问题,或者至少是其中的一部分?
谢谢。
最佳答案
这是一个众所周知的问题,叫做“背包问题”,可以用动态规划的方法来解决。
https://en.wikipedia.org/wiki/Knapsack_problem