匈牙利算法 - 系统地分配

时间:2010-12-24 16:26:55

标签: algorithm

我正在项目中实施匈牙利算法。我设法让它工作到Wikipedia上所谓的第4步。我设法让计算机创建足够的零,以便最小量的覆盖线是行/列的数量,但是当我真正将正确的代理分配给正确的工作时,我会陷入困境。我知道如何分配自己,但这更多的是试验和错误 - 也就是说,我没有看到系统的方法,这对计算机来说是必不可少的。

说我们最终有这个矩阵:

   a  b  c  d
0  30 0  0  0
1  0  35 5  0
2  60 5  0  0
3  0  50 35 40

分配给作业的每个代理必须采用的零是(a,3),(b,0),(c,2)和(d,1)。选择这些系统背后的系统是什么?我的代码现在首先选择(b,0),并从现在开始忽略第0行和第b列。然而,它然后选择(a,1),但是选择了这个值,第3行就不再可以进行赋值。

任何提示都表示赞赏。

1 个答案:

答案 0 :(得分:1)

好吧,我确实设法最终解决了这个问题。我使用的方法是检查是否有任何列/行只有一个零。在这种情况下,该代理必须使用该作业,并且将来必须忽略该列和行。然后,再做一次,以便为每个代理人找到一份工作。

在我的例子中,(b,0)将是第一选择。之后我们有:

   a  b  c  d
0  x  x  x  x
1  0  x  5  0
2  60 x  0  0
3  0  x  35 40

再次使用该方法,我们可以做(a,3)等。我不确定它是否已被证明这总是正确的,但它似乎是。