假设我有一个具有值的数组:
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
那我怎么能做到这一点?
我可以研究哪种算法吗?
答案 0 :(得分:0)
您正在描述binpacking problem,即NP-Complete,因此没有已知的多项式解决方案来解决它。
如果您需要精确的话,您可以尝试指数式方法(检查所有可能性)。如果您想要“足够接近”,您可以搜索文献中的某些近似算法,或者使用AI字段中的某些启发式搜索解决方案,例如Genetic Algorithm或Hill Climbing。