找到树的“最小分支” - 仓库问题的解决方案

时间:2010-05-05 11:53:56

标签: algorithm

我有一个仓库,我保存货物。每篇文章占用一定数量的仓库空间,成本给出了美元金额。

现在,因为仓库已满,而且我期待新的交付,我必须腾出一些空间 - 不少于新的交付将占用,但我也必须尽量减少我的损失。换句话说,我必须通过丢弃一些物品来清空至少X立方米的仓库空间,确保这些物品的价值是可能的最小值。

实施例: 如果X = 10m3,那么我宁愿抛出占用20m3的物品,价值1000美元,而物品的价值恰好是10m3,但价值2000美元。 当然,在实际计算中,有必要抛弃多个项目,可能是5个,10个甚至20个。

我所想的是将上述问题表示为树,其中节点表示空心空间的体积,边缘表示lost value,然后搜索值大于或等于X的节点,然后选择沿着从树根到该节点的边缘具有最低lost value的节点。

我不确定这是否是好方法,因为例如仓库完整树中的100个项目在第一个深度级别上有100个节点,在第二个级别上有100 * 99 = 9900个节点等,所以这很快就会开始有效。

对于这类问题,是否有更好的方法,或者甚至是一些经过验证的算法(我不知道)?

1 个答案:

答案 0 :(得分:1)

这称为Knapsack problem

稍微更改您的问题以使其符合背包:列出您在仓库中的所有项目+您要添加的所有项目。寻找最好的帮助。

嗯,在这种情况下,这意味着你不会试图清空仓库中的垃圾空间,我认为这不是太愚蠢。

啊,如果您没有按照链接进行操作,那么NP-complete,如果您想要最佳解决方案,那么您就会受到伤害:)