最佳分配算法

时间:2010-04-22 08:36:50

标签: algorithm

我正在为下面的场景寻找最佳分配算法。

我们要求说18件。我的货架上的库存如下。

Bin A - 10 Bin B - 6 Bin C - 3 Bin D - 4

算法应按以下顺序提出分类

Bin A(10),Bin D(4),Bin C(3)

真实场景我们有n个不同数量的垃圾箱。我们需要找到最佳组合。目标是最大化分配数量。

你能帮忙吗?

此致 Shaju

3 个答案:

答案 0 :(得分:6)

您的问题类似于bin-packing problemknapsack problem

查看这些内容并了解如何将这些方法应用于您的问题。

答案 1 :(得分:0)

如果这是一个真实的东西而不是家庭作业,那么你可能会蛮力逃脱。尝试所有箱子的组合,看看哪个是最好的。

在Python中,使用http://www.technomancy.org/python/powerset-generator-python/中的超集函数,然后使用:

>>> bins=[10,6,3,4]
>>> tgt=18
>>> max( [ y<=tgt and (y,x) for (y,x) in [(sum(x),x) for x in powerset(bins)]])
(17, [10, 3, 4])

所以你去:最佳匹配是17,使用10 + 3 + 4。那就是如果你想要选择满足最多可以达到目标数量的满箱。调整味道。

答案 2 :(得分:-1)

你可以试试这个:

步骤1.
按可用空间量对箱子进行分类 最大的bin具有索引0,最小的bin具有索引Z. 挑选箱从索引0开始,直到总空间要么是您正在寻找的,要么您已经得到了太多。如果你有你想要的总数,那就停下来吧。如果没有,请继续。

步骤2.
假设您选择的最后一个bin位于索引L(您已经选择了L + 1个bin)。现在从L下降开始,在索引L-x处交换箱,使用索引Z-x处的箱。通过这些交换,您可以减少总数。在总数低于您要查找的值之前停止交换。如果您有所需的总数,请停止。否则执行第3步。

步骤3.
假设您现在已经选择了索引0和L-X之间以及Z和Z-X之间的区间,并且总数(稍微)高于您要查找的区间。 现在对于0和L-X之间的每个bin,找到索引L-X + 1和Z-X-1之间的最佳bin,你可以将它交换掉以减少总数,这样总数正是你想要的。

这个算法是线性的,让你很有可能找到一套完美的箱子。

我很想知道这是否适合你。