http://en.wikipedia.org/wiki/Assignment_problem
我将要描述的情况来自以下讲座:http://www.youtube.com/watch?v=BUGIhEecipE时间为32:00 教授解释了这个问题,但他没有提出任何解决方案
假设我们有下表。行代表工人,列代表分配,值代表工人完成分配所需的时间
3 1 1 4
4 2 2 5
5 3 4 8
4 2 5 9
最初,我找到每行的最小值,并从同一行的所有其他值中减去它。我对列做了同样的事情,我得到了以下结果
0 0 0 0
0 0 0 0
0 0 1 2
0 0 3 4
现在,一个明显的解决方案是工人1接任务4,工人2任务3,工人3任务2,工人1任务1
然而,使用编程语言你无法真正找到它。如果我做出任意选择,我可以选择例如
工人1,任务1 工人2,任务2 然后我不能选择任何东西,因为剩余的成本大于零。
如果我执行滴答过程,我基本上必须勾选所有行和所有列,因此表的值不会真正改变。
我的问题是,如何克服这个问题?有什么方法可以帮助我实现这个目标吗?
另外,您能否向我推荐一些更简单的方法来解决分配问题?整个滴答过程和减去最小/最大声音听起来不像时间复杂度低
我正在尝试实现一种算法,但由于我可能不得不处理这种情况,我认为没有必要实现最终会出错的东西
提前致谢
答案 0 :(得分:0)
如果你看一下http://en.wikipedia.org/wiki/Hungarian_algorithm中的“关于二分图的算法”部分,那么你会看到一个方法,使用广度优先搜索,找到匹配或找到要从行中减去的常量和列。在您引用的示例中,它应该找到匹配的。
我没有在关于分配算法的维基百科文章中引用它,但是从内存中我认为匈牙利算法对于这个问题是一个非常有竞争力的算法。