Algorithm 一个附加约束的背包

Algorithm 一个附加约束的背包,algorithm,dynamic-programming,knapsack-problem,Algorithm,Dynamic Programming,Knapsack Problem,这是一个古老而著名的背包问题: 这里有一个约束条件下的背包问题。 我有一个背包,大小W=100000000和N=100我为它写了动态解,我的算法的复杂性是O(100000000*100),这在时间和空间上都太大了,但这里有一个条件,要么W≤ 50000或最多1个≤ 我≤ 六≤ 500。因此,如果我的背包尺寸超过50000,我的物品最大价值将受到限制。 现在我想知道,在这种情况下,如何降低算法的时间复杂度?我认为背包问题取决于背包的大小和物品的数量,因此物品的价值如何改变我的算法?而不是创建一个大

这是一个古老而著名的背包问题:
这里有一个约束条件下的背包问题。
我有一个背包,大小W=100000000N=100我为它写了动态解,我的算法的复杂性是
O(100000000*100)
,这在时间和空间上都太大了,但这里有一个条件,要么
W≤ 50000或最多1个≤ 我≤ 六≤ 500。
因此,如果我的背包尺寸超过50000,我的物品最大价值将受到限制。

现在我想知道,在这种情况下,如何降低算法的时间复杂度?我认为背包问题取决于背包的大小和物品的数量,因此物品的价值如何改变我的算法?

而不是创建一个大小
W*n
的表,其中每个条目
D[x][I]
表示使用第一个
i
项最多可获得的
x
重量的最佳值(最高值),使用表中的
D[x][i]
是获得
x
值所需的最小重量,使用第一个
i
元素:

D(0,i) = 0                i>0
D(x,0) = infinity         x > 0
D(x,i) = infinity         x<0 or i<0
D(x,i) = min{ D(x,i-1), D(x-value[i],i-1) + weight[i])
D(0,i)=0i>0
D(x,0)=无穷大x>0

D(x,i)=无穷大x这里有一个DP的版本,它在时间O(nV)而不是O(nW)中运行,其中n是项数,V是总(整)值,W是总(整)权重。@David Eisenstat!请你给我更多的指导和解释,或者给我一个链接,可以帮助我meSo我是对的x应该在1和max之间1@Daniel.V否,它应该在max和max(值)*100之间(假设100个不同的值)1.我知道你的答案是对的,但我对你的公式感到困惑。你能给我一个链接吗pseudocode@Daniel.V代码将非常类似于“常规”背包,但有以下区别:(1)表大小,正如我们上面讨论的。(2) 选择两个候选项的最小值(权重)而不是最大值(值)。(3) 重量和价值“开关”部件。你是否正确理解“普通”背包?如果是这样,这应该相当容易。