2024-04-20 09:23:08 发布
网友
我从我的算法课本上截取了一段代码,我很难理解它
K(0) = 0 for w = 1 to W K(w) = max{K(w - w_i)+vi:w_i<=w} return K(W)
我不明白第三行发生了什么,这里的冒号是什么意思?这可以用不同的方式写吗
这看起来不像python。看起来K应该是一个数组,但是在python中索引是用方括号表示的,所以K[0] = 0
K[0] = 0
而且for w = 1 to W在python中根本不起作用,它更像:for w in range(1, W+1):
for w = 1 to W
for w in range(1, W+1):
至于伪代码的作用是什么:对于K的每个元素,它计算所有先前值的最大值并添加vi
for w in range(1, W+1): K[w] = max(K[w - w_i] + vi for w_i in range(1, w+1))
但是vi似乎没有改变,所以对于正vi,这只产生一个线性递增数组(即[0, 2, 4, 6, ...表示vi = 2),而对于负vi,它只是反复重复vi:[0, -3, -3, -3, ...表示vi = -3
[0, 2, 4, 6, ...
vi = 2
[0, -3, -3, -3, ...
vi = -3
因为它只返回数组的最后一个值,所以可以简化为
return W*vi if vi>0 else vi
这看起来不像python。看起来K应该是一个数组,但是在python中索引是用方括号表示的,所以
K[0] = 0
而且
for w = 1 to W
在python中根本不起作用,它更像:for w in range(1, W+1):
至于伪代码的作用是什么:对于K的每个元素,它计算所有先前值的最大值并添加vi
但是vi似乎没有改变,所以对于正vi,这只产生一个线性递增数组(即
[0, 2, 4, 6, ...
表示vi = 2
),而对于负vi,它只是反复重复vi:[0, -3, -3, -3, ...
表示vi = -3
因为它只返回数组的最后一个值,所以可以简化为
相关问题 更多 >
编程相关推荐