我正在关注Youtube of the Indian guy about the Hungarian problem上的教程。我堆叠在他决定下一步将选择哪些行和列的位置。他的榜样没有我面临的问题。这是我的例子表:
2 1 0 0 0 3
2 0 4 5 2 7
0 7 0 0 0 5
3 2 3 1 2 0
0 0 6 3 3 5
3 4 5 2 0 3
因此,让我们一步一步地开始行和列选择:
现在,剩下的零是(1,3),(1,4),(3,3),(3,4)
我找不到处理它们的方法,也不能用列方式或行方式处理它们。我该怎么办?
这是最后的表格:
2 1 0? 0? 0(su) 3
3 0(se) 4 5 2 7
0(su) 7 0? 0? 0(su) 5
3 2 3 1 2 0(se)
0(se) 0(su) 6 3 3 5
3 4 5 2 0(se) 3
其中
答案 0 :(得分:1)
在这个特定的例子中,我们可以任意选择0.选择左上角给我们
2 1 0(se) 0(su) 0(su) 3
3 0(se) 4 5 2 7
0(su) 7 0(su) 0? 0(su) 5
3 2 3 1 2 0(se)
0(se) 0(su) 6 3 3 5
3 4 5 2 0(se) 3
然后我们可以选择最终的免费0并完成。
但这并不总是有效。考虑
0 0 0 0
0 0 0 0
0 0 1 2
0 0 3 4
(如果您更喜欢视频,我使用与here相同的问题,不过我实际上会解决它。)
我们不能从一开始就选择任何东西,所以我们随意选择第一个0。
0(se) 0(su) 0(su) 0(su)
0(su) 0 0 0
0(su) 0 1 2
0(su) 0 3 4
现在我们可以选择(1,3),因为它是行中唯一的免费0。
0(se) 0(su) 0(su) 0(su)
0(su) 0(su) 0 0
0(su) 0(se) 1 2
0(su) 0(su) 3 4
然后(3,1),因为它是列中唯一的0。
0(se) 0(su) 0(su) 0(su)
0(su) 0(su) 0(se) 0(su)
0(su) 0(se) 1 2
0(su) 0(su) 3 4
这给了我们3个总分配,但我们需要4个解决方案,并且没有更多的可用0分配。此时可能没有解决方案,因此我们需要继续使用匈牙利算法进行线条绘制步骤。
G. Srinivasan教授在我链接的视频中详细介绍了这一点,所以我将跳过结果。如果绘制的线数大于我们正在寻找的任务数量,我们将继续使用剩余的匈牙利算法;如果它少了,上一步出了点问题,你应该回去看看你的工作;但如果它是相同的(就像在这个例子中那样),那么我们知道这里有一个我们没有找到的最佳解决方案。
我对有问题的任意分配的解决方案是更随意的分配。第4行是此时唯一一个没有赋值的行,所以我们将从那里开始并分配它的第一个0(暂停的0现在无关紧要,所以我没有标记它们。)
0(se) 0 0 0
0 0 0(se) 0
0 0(se) 1 2
0(se) 0 3 4
这显然有问题,因为我们已经在第一列中进行了分配。要解决这个问题,我们需要将其中一个移到其他地方。幸运的是,第4行仍然没有赋值,并且(1,4)是零,所以我们可以将(1,1)中的赋值移动到(1,4)。
0 0 0 0(se)
0 0 0(se) 0
0 0(se) 1 2
0(se) 0 3 4
现在没有冲突,我们有4个任务,所以这是我们的解决方案。