python – 0/1背包几个变量:哪种算法?
作者:互联网
我必须使用约束来实现0/1背包问题的解决方案.
在大多数情况下,我的问题很少有变量(~10-20,最多50).
我从大学回忆起,有许多算法在许多情况下比蛮力更好(我想,例如,分支定界算法).
由于我的问题相对较小,我想知道在使用复杂的解决方案而不是蛮力时,效率方面是否有明显的优势.
如果它有帮助,我用Python编程.
解决方法:
如果权重之和足够小,您可以使用伪多项式算法,该算法使用动态编程.你只需计算,你是否可以为每个X和Y获得前Y项的重量X.
这在时间O(NS)中运行,其中N是项目数,S是权重之和.
另一种可能性是使用中间相遇方法.
将项目分成两半并:
对于前半部分,采取每种可能的项目组合(每半部分有2 ^(N / 2)种可能的组合)并将其权重存储在某些集合中.
下半场采取各种可能的项目组合,检查上半部是否有合适的重量组合.
这应该在O(2 ^(N / 2))时间内运行.
标签:python,algorithm,knapsack-problem 来源: https://codeday.me/bug/20190709/1414854.html