gpt4 book ai didi

python-3.x - 背包算法,奇怪的行为(python3)

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:39:09 24 4
gpt4 key购买 nike

我一直致力于递归并试图解决背包问题[ https://en.wikipedia.org/wiki/Knapsack_problem] .我想出了下面的算法,它工作得很好:

cost_array = [2,3,4,5,9]
value_array = [3,4,8,8,10]

def KP(Weight, C, V):
if Weight < 2:
return 0
q = 0
for i in range(len(C)):
q = max(q, (KP(Weight-C[i], [x for j,x in enumerate(C) if j!=i], \
[x for j,x in enumerate(V) if j!=i]) + V[i]*(Weight-C[i] >= 0)))
return q


print(KP(25,cost_array,value_array))

但是,当我更改 q 的值时至 q < 0并调用print(KP(25,cost_array,value_array))我得到的结果是 33 - q .与 33是背包可以拥有的最大值。

奇怪的是,如果我用 Weight > 23 调用初始函数,我只会得到这种行为在这里 23=2+3+4+5+9 .

我不知道什么时候出现负数 q被添加到我的结果中这一行从来没有执行过这样的操作,你们能赐教吗?

q = max(q, (KP(W-C[i], [x for j,x in enumerate(C) if j!=i], [x for j,x in enumerate(V) if j!=i]) + V[i]*(W-C[i] >= 0)))

谢谢,

达里克

最佳答案

假设q=-2(一个负值)因此,您正在用 -2 填充基本案例。即 -2 为您的函数的基本情况返回,然后将其添加到递归的每个步骤的答案中。尝试使用二维数组自下而上的方法。你可以在这里查看 https://www.youtube.com/watch?v=8LusJS5-AGo .在您的情况下,您正在用 -2 填充矩阵基本情况。

def knapSack(W, wt, val, n): 
K = [[0 for x in range(W+1)] for x in range(n+1)]

q=-2 #Make it zero for correct answer

# Build table K[][] in bottom up manner
for i in range(n+1):
for w in range(W+1):
if i==0 or w==0:
K[i][w] = q #Here you are assigning negative value
elif wt[i-1] <= w:
K[i][w] = max(val[i-1] + K[i-1][w-wt[i-1]], K[i-1][w])
else:
K[i][w] = K[i-1][w]

return K[n][W]

# Driver program to test above function
value_array = [3,4,8,8,10]
cost_array = [2,3,4,5,9]
Weight = 25
n = len(val)
print(knapSack(Weight, cost_array, value_array, n))

关于python-3.x - 背包算法,奇怪的行为(python3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53714688/

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