所以我有一个问题的典型递归实现,需要一个 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)
问题是我有数以百万计的数据,而且似乎这种方法会计算每个条目,导致明显的内存和速度问题。我可以使用某种动态编程/记忆技术来进一步优化此实现吗?