具有大且不平衡的利润矩阵的匈牙利任务替代方案

时间:2017-10-05 05:30:37

标签: algorithm matrix knapsack-problem hungarian-algorithm

在特定情况下,我需要帮助解决分配问题。在一种情况下,利润矩阵维度2000乘以23000(2000个项目和23000个箱子,其中每个箱子只能包含一个项目,并且没有负利润)。如果应用匈牙利赋值,算法将首先创建一个23000乘23000的方阵,并导致OutOfMemory异常。

我想解决的问题就是最优分配方案可以产生的最大利润。因此,无需输出实际的最佳分配,只需要最佳值。此值也可以是近似值。我想知道是否存在可以节省内存和计算成本的替代方法。

提前致谢。

1 个答案:

答案 0 :(得分:0)

您实际上只需一列即可模拟所有虚拟列。

我不知道您正在遵循的具体说明,但算法中的一个步骤是使用尽可能少的水平和垂直线覆盖矩阵中的每个零点。在所有虚拟列仍为零的开始时,覆盖它们的最有效方法是逐列覆盖它们。也可以覆盖一些行,并且两次覆盖的值递增一个量。更重要的是,每个虚拟列中的同一行将增加相同的数量

现在继续虚拟列的某些行不为零,我们再次到达此步骤。由于所有的虚拟列仍然相同,因此如果覆盖一个虚拟列是有效的,则它们都将被覆盖。因此,即使值可能会发生变化,每个虚拟列始终与每个其他虚拟列相同,因此您只需使用一个数组即可表示它们。

如果您拥有大量真实数据,可能仍会遇到问题,但这应该会对您提到的情况有所帮助。