我尝试用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
这里有两个问题:
答案 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