ナップサック問題
この問題は、もしも全数探索を行えば「品物を選ぶ・選ばない」の2通りの選択肢を品物の個数分だけ試すことになり、その計算量は O ( 2 | I | ) {\displaystyle O(2^{|I|})} になる。しかし、効率の良い貪欲法による解法が知られており,ここではその解法を示す。
この問題における漸化式は
V ( i , w ) = { 0 if i = 0 or w = 0 V ( i − 1 , w ) if w i > w max ( V ( i − 1 , w ) , V ( i − 1 , w − w i ) + v i ) otherwise {\displaystyle V(i,w)={\begin{cases}0&{\text{if }}i=0{\text{ or }}w=0\\V(i-1,w)&{\text{if }}w_{i}>w\\\max(V(i-1,w),V(i-1,w-w_{i})+v_{i})&{\text{otherwise}}\end{cases}}}
となる。ここで V(i, w) の値は重量の合計がw以下である場合に,添字がi以下の品物を使って実現できる価値の合計の最大値を表す。この式は
「1つも品物を選べない」あるいは「最大重量が 0 {\displaystyle 0} 」であるときには、詰め込める品物がないので選ばれた品物の価値の合計を 0 {\displaystyle 0} とする