使用DP算法降低Knapsack 0~1的时间复杂度

时间:2017-03-18 20:42:39

标签: c time-complexity dynamic-programming knapsack-problem

我正在使用DP算法,即将子问题值存储在2D数组中,其中一个轴

表示从nw的{​​{1}}项和其他0值,其中W是最大值

背包的能力。因此W值是我需要的最佳值

计算。我在其他资料中读过这个算法的时间复杂度

T[n-1][W]。我的问题是:是否有可能进一步降低时间复杂度?

我发现其他答案几乎相同,但如果没有例子,我就无法理解:how to understand about reducing time complexity on 0~1 knapsack

我告诉我们,我们不需要计算O(nW)T[i][w]值,因为它们没有在最佳值中使用,但我无法正确理解,任何人都可以提供详细和可视化例?这对我有很大帮助。

1 个答案:

答案 0 :(得分:0)

您尝试填充的2D数组的大小为n W(实际上,W + 1,因为值来自0..W,但是一个接一个地没有这不会影响渐近的复杂性。因此,要填充该数组,您至少需要n*W工作(即使您只是将数组初始化为全零!)。

因此,Θ(nW)(紧束缚,同时为O(nW)和Ω(nW))是渐近算法时间复杂度方面最好的。

这就是动态编程解决方案如此酷的原因,就是你在解决方案数组的每个元素(在这种情况下,2D)上花费一些时间从头到尾做一些不变的工作(将此与复杂性相对照自上而下的递归解决方案!)。