我在这里看到了0-1背包问题的递归动态规划解决方案。我对此进行了记忆化并编写了以下代码。
private static int knapsack(int i, int W, Map<Pair<Integer, Integer>>, Integer> cache)
{
if (i < 0) {
return 0;
}
Pair<Integer, Integer> pair = new Pair<>(i,W);
if (cache.contains(pair)) {
return cache.get(pair)
}
int result = -1;
if (weights[i] > W) {
result = knapsack(i-1, W);
} else {
result = Math.max(knapsack(i-1, W), knapsack(i-1, W - weights[i]) + values[i]);
}
cache.put(pair, result);
return result;
}
能否有人向我解释一下,为什么时间复杂度应该是O(nW),其中n是物品的数量,W是重量限制。