Algorithm 有界背包特例-单个物品的重量比物品的数量小
例如,假设每件物品的价值与其重量相同,且所有重量均为正整数,我想知道,如果单个物品重量与物品数量n相比较小,且背包容量为所有物品重量之和的一半,是否存在优化?e、 g.100k件,每件重量限制为[1,10] 算法应该给出精确解。我知道O(n*W)时间和O(W)空间DP算法,但我认为在这种情况下可能有更好的方法来解决它。提前谢谢Algorithm 有界背包特例-单个物品的重量比物品的数量小,algorithm,knapsack-problem,Algorithm,Knapsack Problem,例如,假设每件物品的价值与其重量相同,且所有重量均为正整数,我想知道,如果单个物品重量与物品数量n相比较小,且背包容量为所有物品重量之和的一半,是否存在优化?e、 g.100k件,每件重量限制为[1,10] 算法应该给出精确解。我知道O(n*W)时间和O(W)空间DP算法,但我认为在这种情况下可能有更好的方法来解决它。提前谢谢 这是一个algo挑战,O(n*W)时间解决方案在功能上是正确的,但速度不够快(比要求的慢一个数量级)。在这个问题上我似乎找不到任何东西。输入是项目权重列表,所需输出是可装
这是一个algo挑战,O(n*W)时间解决方案在功能上是正确的,但速度不够快(比要求的慢一个数量级)。在这个问题上我似乎找不到任何东西。输入是项目权重列表,所需输出是可装入背包的项目的最大总值。您要找的论文是Pisinger 1999,“有界权重背包问题的线性时间算法”。不过这有点痛苦,因为pdf似乎丢失了一些变量上的区别标记 按任意顺序将项目添加到解决方案中,直到您达到一个导致您超过W的项目b—中断项目。。。b-1构成了一个平衡填充物,所有其他平衡填充物都是通过一系列的两个操作可以达到的:
- A平衡插入是在重量为W的平衡溶液中添加b或b以外的项目
- 对于从b开始的每个项目t
- 和对于每个重量w,使得w-9
- 我们将在b之前跟踪最新的项目s
- 这样,重量w的平衡填充可以通过仅在s和t之间添加/删除项目来实现
for (w = W-9, w <= W, w++) { s(b-1, w) = 0 }
for (w = W+1, w <= W+10, w++) { s(b-1, w) = 1 }
s(b, wBreak) = b - 1
for(w=w-9,wPisinger 1999纸质背包可在
以及在
正如Bounnap.c你在寻找这个:@AbhishekBansal:他知道这个解决方案。他需要更好的东西。顺便说一句,如果你有无限背包(这意味着你可以使用每件物品任意多次),并且只有K个不同的权重,那么你只有K个不同的物品(这已经降低了时间复杂性)。他没有提到ILP方法,这就是为什么我让他指向链接。虽然我不能说它更好。所以,为了理解你的例子,如果n=10^6
,那么你可能有10^5
重量1
的物品,以及10^5
重量2
的物品,等等W
,您的目标总重量也会很大?谢谢。这看起来很有希望。@AndyJones“很容易看到两件事:首先,所有平衡溶液的重量都在W的10个单位以内”--我不明白这一点。为什么所有的平衡解都在W的10个单位以内?假设sum\u so\u far=9和W=20,我的break\u item=12,那么(W-sum\u so\u far)=11>10。另外,我在哪里可以找到皮辛格1999年论文的版本?谢谢!@AndyJones:啊,我明白了。我读了OP的问题,现在它有了意义。早些时候,我只读了标题,然后跳到了解决方案。谢谢,很抱歉!@NishantKelkar为了防止其他人感到困惑,一个平衡的解决方案必须在10个单位以内,因为e OP将项目权重限制为[1,10]。至于论文,已经六个月了,但我想我只找到了一个付费版本。现在再看一看,第8章似乎涵盖了类似的内容。网站关闭了,但wayback机器将论文放在了。然而,我尝试使用gcc编译它,我发现了WinMain错误。
for (t = b, t <= N, t++)
{
for (w = W-9, w <= W, w++)
{
// Trying adding item t to the solutions with weight <= W
s(t, w + w_t) = max( s(t-1, w), s(t-1, w + w_t) )
}
for (w = W+10, w > W, w--)
{
// Removing as many items as needed to get back to a balanced filling
for (j = s(t, w) - 1, j >= s(t-1, w), j--)
{
s(t, w - w_j) = max( s(t, w - w_j), j )
}
}
}