尝试在PHP中创建类似于近似子集和表的算法

尝试在PHP中创建类似于近似子集和表的算法,php,algorithm,math,Php,Algorithm,Math,我一直在尝试用PHP构建一个算法,在某些方面类似于子集和问题,但在本例中,我不寻找精确匹配,只寻找最接近的匹配,因为在大多数情况下不太可能存在精确匹配 让我再详细解释一下。假设我拥有各种假设性投资,需要从现有投资中筹集X的总和。假设X=40000 输入数组为(4500875012900),每个保持的数目为(8,10,10) 现在,我可以直观地计算出4500*8=36000,12900*3=38700,但更接近的匹配是(4500*6)+12900=39900 我很快发现,尝试循环通过每个可能的组合

我一直在尝试用PHP构建一个算法,在某些方面类似于子集和问题,但在本例中,我不寻找精确匹配,只寻找最接近的匹配,因为在大多数情况下不太可能存在精确匹配

让我再详细解释一下。假设我拥有各种假设性投资,需要从现有投资中筹集X的总和。假设X=40000

输入数组为(4500875012900),每个保持的数目为(8,10,10)

现在,我可以直观地计算出4500*8=36000,12900*3=38700,但更接近的匹配是(4500*6)+12900=39900

我很快发现,尝试循环通过每个可能的组合可以快速创建1000万个可能的数组,如果添加额外的输入,甚至更多。如果这只是出于我自己的目的,但对于web应用程序来说是不可行的,那么这不会是一个问题

我不是要求任何人为我写代码。我不是数学家,所以我只是想知道是否有不同的方法可以解决这个问题,或者是其中最简单的部分


谢谢。

这是一个众所周知的问题,叫做“背包问题”,可以用动态规划方法解决


这是一个众所周知的问题,称为“背包问题”,可以用动态规划方法解决


嗨,我认为背包问题是一种“三维”问题,因为它们涉及重量和尺寸,而这只是“二维”,因为我只关心数值。我是不是有点不明白?(很可能…)你是对的,但你可以通过将每个值的权重设置为其值(例如,
4500
的值为
4500
,权重为
4500
),轻松地将问题转化为3D问题。嗨,我还有一个相互关联的问题。在这种情况下,使用与上述相同的值,我还需要进行第二次计算,假设免税金额为29250英镑(作为示例)。因此,我需要找出如何以最有效的方式获取余额(10750英镑),但在这种情况下,余额不得小于10750英镑,因此我试图找出接管的最小金额以及10750英镑以上的金额。因此,考虑到原始值45008750和12900,答案显然是1 x 12900。我想我可以颠倒计算?嗨,我认为背包问题是“三维”的,因为它们涉及重量和大小,而这只是“二维”,因为我只关心数值。我是不是有点不明白?(很可能…)你是对的,但你可以通过将每个值的权重设置为其值(例如,
4500
的值为
4500
,权重为
4500
),轻松地将问题转化为3D问题。嗨,我还有一个相互关联的问题。在这种情况下,使用与上述相同的值,我还需要进行第二次计算,假设免税金额为29250英镑(作为示例)。因此,我需要找出如何以最有效的方式获取余额(10750英镑),但在这种情况下,余额不得小于10750英镑,因此我试图找出接管的最小金额以及10750英镑以上的金额。因此,考虑到原始值45008750和12900,答案显然是1 x 12900。我想我可以反算一下吗?