背包的分支和绑定方法的时间复杂性是什么?

时间:2015-11-02 03:12:22

标签: python algorithm knapsack-problem

我尝试用def smallerThanN(intList,intN): y=0 newlist=[] list1=intList for x in intList: if int(x) < int(intN): print(intN) y+=1 newlist.append(x) return newlist 实现对背包问题的分支定界方法。

Python

这里有两个问题:

  • 上述代码的时间复杂度是什么?
  • 上述代码的任何改进或优化?

2 个答案:

答案 0 :(得分:1)

作为一般规则,CS理论家发现分支定界算法极难分析:参见例如here进行一些讨论。你总是可以采用全枚举边界,这通常很容易计算 - 但它通常也非常松散。

答案 1 :(得分:0)

我发现可以使用priority-queue

进行优化
def knapsack(vw, limit):
    maxValue = 0
    PQ = [[-bound(0, 0, 0), 0, 0, 0]]
    while PQ:
        b, v, w, j = heappop(PQ)
        if b <= -maxValue:
            if w + vw[j][1] <= limit:
                maxValue = max(maxValue, v + vw[j][0])
                heappush(PQ, [-bound(v+vw[j][0], w+vw[j][1], j+1),
                                    v+vw[j][0], w+vw[j][1], j+1])
            if j < len(vw) - 1:
                heappush(PQ, [-bound(v, w, j+1), v, w, j+1])
    return maxValue