python 符号形式教科书

python notation form textbook

我从我的算法教科书上截取了一段代码,但我很难理解它。

K(0) = 0
for w = 1 to W
    K(w) = max{K(w - w_i)+vi:w_i<=w}
return K(W)

我对第 3 行发生的事情感到困惑,这里的冒号是什么意思?这可以用不同的方式写吗?

这看起来不像 python。看起来K应该是一个数组,但是索引在python中用方括号表示,所以K[0] = 0

for w = 1 to W 在 python 中根本不起作用,它更像是这样: 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 和超过:[0, -3, -3, -3, ... 对于 vi = -3

因为它returns只是数组的最后一个值,所以可以简化为

return W*vi if vi>0 else vi