實際上所描述的問題不在於0-1-Knapsack problem,而是一個特殊的情況下,其也被稱爲最大的子集和問題,這是desribed here。它是NP
-complete,這意味着它不比0-1 -napshot複雜。這就是說,它可以通過任何旨在用於0-1-揹包問題的優化算法來解決,方法是將物品利潤設置爲等於其權重。總而言之,可以使用以下動態規劃算法來解決最優化問題; s[i]
表示i
第012項和m
是整數值狀態空間時的大小,其中m[i,s]
表示使用項目範圍{0,...i}
中的項目可達到的最大值。
for j from 0 to W do:
m[0, j] := 0
for i from 1 to n do:
for j from 0 to W do:
if s[i] > j then:
m[i, j] := m[i-1, j]
else:
m[i, j] := max(m[i-1, j], m[i-1, j-s[i]] + s[i])
正如他們原來的問題,提及以下貪婪算法產生一個2-近似,這是一種類似的算法的揹包問題的變形例。
1. select any subset of the items such that there is no other
item which can be feasibly chosen
2. select the largest item
3. out of 1. and 2., choose the subset which yields the larger total size
原來這是* * 0/1揹包畢竟只是確定的價格相同的權重。 – harold
從這個角度來看,你是對的,但我認爲對於這個問題可能有解決方案,因此我已經將它命名爲「不是揹包」:) – haykart