gpt4 book ai didi

python - 背包的分支定界方法的时间复杂度是多少

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:01:52 26 4
gpt4 key购买 nike

我尝试使用 Python 实现背包问题的分支定界方法。

def bound(vw, v, w, idx):
if idx >= len(vw) or w > limit:
return -1
else:
while idx < len(vw) and w + vw[idx][1] <= limit:
v, w, idx = v+vw[idx][0], w+vw[idx][1], idx + 1
if idx < len(vw):
v += (limit - w)*vw[idx][0]/(vw[idx][1] * 1.0)
return v

def knapsack(vw, limit, curValue, curWeight, curIndex):
global maxValue
if bound(vw, curValue, curWeight, curIndex) >= maxValue:
if curWeight + vw[curIndex][1] <= limit:
maxValue = max(maxValue, curValue + vw[curIndex][0])
knapsack(vw, limit, curValue + vw[curIndex][0], curWeight + vw[curIndex][1], curIndex+1)
if curIndex < len(vw) - 1:
knapsack(vw, limit, curValue, curWeight, curIndex+1)
return maxValue

maxValue = 0

def test():
with open(sys.argv[1] if len(sys.argv) > 1 else sys.exit(1)) as f:
limit, n = map(int, f.readline().split())
vw = []
for ln in f.readlines():
vl, wl = map(int, ln.split())
vw.append([vl, wl, vl/(wl*1.0)])
knapsack(sorted(vw, key=lambda x: x[2], reverse=True), limit)

这里我有两个问题:

  • 上述代码的时间复杂度是多少?
  • 以上代码有什么改进或优化吗?

最佳答案

作为一般规则,CS 理论家发现分支定界算法极难分析:参见例如here进行一些讨论。您始终可以采用全枚举界限,这通常很容易计算——但通常也非常宽松。

关于python - 背包的分支定界方法的时间复杂度是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33470170/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com