【发布时间】:2016-12-23 00:43:14
【问题描述】:
假设您有一个存放易碎货物(例如蔬菜或水果)的仓库,您只能取出一个装有蔬菜的容器一次。如果你移动它们两次,它们会腐烂得太快,再也卖不掉了。
因此,如果您为每个容器的蔬菜赋予价值(取决于它们还能保持新鲜的时间),您希望首先出售价值最低的。而当客户询问某个重量时,您希望提供良好的服务,并给出准确的重量(因此您需要从仓库中取出一些额外的重量,并在出售后将多余的部分扔掉)。
我不知道这个问题是否有名字,但我认为这是背包问题的对偶形式。在背包问题中,您希望最大化价值并将重量限制在最大范围内。在这里,您希望最小化该值并将权重限制到最小。
您可以很容易地看到这种二元性,将仓库视为背包,并将仓库的最大值和限制重量优化为当前重量减去客户要求的最大值。
但是,许多解决背包问题的实用算法都依赖于假设您可以携带的重量与您可以选择的总重量相比较小。 F.e. dynamic programming 0/1 解决方案依赖于循环直到达到最大权重,FPTAS 解决方案保证在总权重的 (1-e) 倍内是正确的(但一个巨大值的小因素仍然可以使差别很大)。
所以当想要的重量很大时,两者都有问题。
因此,我想知道是否有人已经研究过“双背包问题”(如果可以找到一些关于它的文献),或者是否对我遗漏的现有算法进行了一些简单的修改。
【问题讨论】:
标签: algorithm knapsack-problem