分组以使和接近目标值的算法

时间:2017-01-26 14:34:57

标签: algorithm math

我正在尝试找到一种算法,但谷歌搜索我的确切问题并不是找到我需要的确切结果。

我获得了一组数字和目标总和。我需要将数字分配给组,以便这些组的总和尽可能接近而不超过目标值。

Example Target Sum = 99
Example Set = { 70, 40, 10, 70, 98, 14, 4, 7, 29, 11, 91, 50, 30 }

期望的结果将是:

{ 70, 29 } 
{ 40, 50, 7} 
{ 98 } 
{ 91, 4 }
{ 70, 10, 11 } 
{ 30, 14 }

...因为它们都加起来接近99.

目标是尽可能少的群体。 我不需要担心资源问题。它将被谨慎执行,并且值的数量将非常少。

1 个答案:

答案 0 :(得分:4)

如果目标是最小化组的数量,并且唯一的限制是每个组的总大小可能不超过目标值,则所考虑的问题是bin packing问题,{{3} }优化问题,相对较好理解。

一般而言,相对简单的启发式方法称为First Fit或First Fit Decreasing,产生的近似比率小于2.更准确地说,First Fit Decreasing产生的紧密比率为(11/9)OPT+(6/9)。 Bin打包不允许PTAS(因此没有FPTAS),但是渐近PTAS的比率为(1+epsilon)OPT+1,其中epsilon是准确度参数。

如果需要一个具有相对简单实施的合适解决方案,First Fit Decreasing可能是候选人。