したがって、1-0 ナップザック問題のような解決策を必要とする問題の典型的な再帰的実装があります。メイン関数のコードは次のとおりです。
def knapsack(items,sizeLimit):
P = {}
def recurse(nItems,lim):
if not P.has_key((nItems,lim)):
if nItems == 0:
P[nItems,lim] = 0
elif itemSize(items[nItems-1]) > lim:
P[nItems,lim] = recurse(nItems-1,lim)
else:
P[nItems,lim] = max(recurse(nItems-1,lim),
recurse(nItems-1,lim-itemSize(items[nItems-1])) +
itemValue(items[nItems-1]))
return P[nItems,lim]
return recurse(len(items),sizeLimit)
問題は、私が何百万ものデータを持っていることです.このアプローチはすべてのエントリを計算するように思われるため、明らかなメモリと速度の問題につながります. この実装をさらに最適化するために使用できる動的プログラミング/メモ化手法はありますか?