我的算法教科书中有一段代码,我很难理解它。
K(0) = 0
for w = 1 to W
K(w) = max{K(w - w_i)+vi:w_i<=w}
return K(W)
我很困惑第3行发生了什么?冒号在这里意味着什么?这可以用不同的方式写出来吗?
答案 0 :(得分:1)
这看起来不像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
由于它只返回数组的最后一个值,因此可以简化为
return W*vi if vi>0 else vi