结合值创造一堆100

时间:2012-10-11 07:56:25

标签: php algorithm optimization evolutionary-algorithm knapsack-problem

假设我有一个具有值的数组:

array(20,40,30,15,60,50,10)

现在我想要的是我需要创建100或接近100的一堆。并为每组100(或接近100)创建单独的回合。

Case 1:
Round 1: array(60,30,10) // 100 or near to 100
Round 2: array(40,50)    // 100 or near to 100
Round 3: array(15,20)    // 100 or near to 100 or remaining

Case 2:
Round 1: array(60,40)    // 100 or near to 100
Round 2: array(50,20,30) // 100 or near to 100
Round 3: array(15,10)    // 100 or near to 100 or remaining

那我怎么能做到这一点?

我可以研究哪种算法吗?

1 个答案:

答案 0 :(得分:0)

您正在描述binpacking problem,即NP-Complete,因此没有已知的多项式解决方案来解决它。

如果您需要精确的话,您可以尝试指数式方法(检查所有可能性)。如果您想要“足够接近”,您可以搜索文献中的某些近似算法,或者使用AI字段中的某些启发式搜索解决方案,例如Genetic AlgorithmHill Climbing