0
我正在讀關於0-1揹包問題維基百科。我只想澄清一些事情。我有兩個問題: http://en.wikipedia.org/wiki/Knapsack_problem#0.2F1_Knapsack_Problem0/1揹包澄清和優化
我遇到了這個僞代碼:
// Input:
// Values (stored in array v)
// Weights (stored in array w)
// Number of distinct items (n)
// Knapsack capacity (W)
for w from 0 to W do
m[0, w] := 0
end for
for i from 1 to n do
for j from 0 to W do
if j >= w[i] then
m[i, j] := max(m[i-1, j], m[i-1, j-w[i]] + v[i])
else
m[i, j] := m[i-1, j]
end if
end for
end for
專門針對這部分:
if j >= w[i] then
m[i, j] := max(m[i-1, j], m[i-1, j-w[i]] + v[i])
1)糾正我,如果我錯了,但不應該」它是:
m[i, j] := max(m[i-1, j], m[i-1, j-w[i]] + v[i], m[i,j-w[i]] + v[i])
?
或者如果沒有,可以有人解釋我爲什麼沒有必要?
...
2)我也有一個問題,如果說我想優化這個有點。通過項目的所有權重(即,存儲在數組w中的值的GCD)的GCD遞增「j從0到W」的循環是否明智? (當我即將實現它時,我現在正在考慮採用代碼方式)。