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
我从我的算法教科书上截取了一段代码,但我很难理解它。
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