如何理解减少0~1背包的时间复杂度

时间:2013-01-09 17:25:21

标签: algorithm knapsack-problem

至于0~1背包问题,

f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}

c [i]表示第i种货物的成本, w [i]表示第i种货物的价值。

我读了一篇文档,其中说时间复杂度可以是优化,特别是当V更大时。如下所示

 i=1...N

 v=V...0 

可以更改为

 i=1...n        

bound=max{V-sum{w[i..n]},c[i]}        

 v=V...bound

这是什么意思?V(袋子的最大值)减去w [i]的总和(商品的价值)怎么样?

这个文档真的很混淆,或者出了什么问题?

1 个答案:

答案 0 :(得分:1)

你没有说出你正在优化的复杂性。你在使用动态编程吗?如果是这样,这可能意味着您不需要为小的v值计算f[i][v],因为您不需要这些值来找到最佳值。

即使您将背景中的所有商品从i + 1放到n,您仍然有V - sum{c[i+1..n]}的容量,所以您不需要解决子问题i(限于货物1..i),容量小于此值。

如果您需要更正式的答案,请详细说明问题以及所使用的算法。