Knapsack DP アルゴリズムに必要な時間とスペースを非整数値で削減しようとしています。
http://en.wikipedia.org/wiki/Knapsack_problem#Meet-in-the-Middle_Algorithm
In particular, if the [elements] are nonnegative but not integers, we could
still use the dynamic programming algorithm by scaling and rounding (i.e. using
fixed-point arithmetic), but if the problem requires fractional digits of
precision to arrive at the correct answer, W will need to be scaled by 10^d,
and the DP algorithm will require O(W * 10^d) space and O(nW * 10^d) time.
DP ナップザック アルゴリズムは [ nx W ] 行列を使用して結果を埋めますが、一部の列は決して埋められず、オブジェクトの重みの組み合わせと一致しません。このようにすると、各行がゼロで埋められてしまい、時間とスペースが無駄になります。
マトリックスの代わりにハッシュの配列を使用すると、必要な時間とスペースを削減できます。
edit:
knapsack capacity = 2
items: [{weight:2,value:3} ]
[0 1 2]
[0 0 0]
2: [0 0 3]
^
Do we need this column?
Substitution with hash:
2: {0:0, 2:3}
Python では、dict 挿入には O(n) の最悪のケースと O(1) の「償却された」線形時間があります。
何か不足していますか?
ナップザック DP アルゴリズムのこのようなバリエーションの複雑さはどのようなものでしょうか?