【发布时间】:2017-06-12 01:33:02
【问题描述】:
我正在尝试找到一种算法,但在谷歌上搜索我的确切问题并没有找到我需要的确切结果。
我得到一组数字和一个目标总和。我需要将数字分配给组,以便这些组的总和尽可能接近而不会超过目标值。
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。
目标是尽可能少的组。 我不需要太担心资源。它将被谨慎执行,并且值的数量将非常低。
【问题讨论】:
-
你能解释一下 close 是什么意思吗?您是希望最小化组和目标之间的差异总和,还是希望使偏离目标的组数量最少,或者在两者之间取得某种平衡?
-
我记得很久以前我用dynamic programming解决了一个类似的问题,不过这个概念很难理解。
-
第一个示例组的总和是 99 (70 + 29)。这是准确的。第二组的总和是97,接近99....他们有多接近并不重要。关键是我需要尽可能少的组。
-
如果目标是最小化最小和最大集之间的差异,它是partition problem 的泛化,已知是 NP 完全的。
-
目标是尽可能减少每个组的总和不超过目标值的组数。