没有成本的工作分配,匈牙利方法会起作用吗?

sap*_*sap 7 algorithm hungarian-algorithm

所以我有一个工作分配问题,没有匈牙利方法所需的传统成本.

例如:

I have 3 workers - A, B and C
I have 5 jobs -  1, 2, 3, 4 and 5
Run Code Online (Sandbox Code Playgroud)

每个工人都有他可以执行的工作列表,如下所示:

worker A can work on job 1, 2, 5
worker B can work on job 1, 2
worker C can work on job 1
Run Code Online (Sandbox Code Playgroud)

最终结果(因为没有成本)是我可以实现的最大分配数.在这个例子中,我最多可以完成3个任务:

worker A on job 5
worker B on job 2
worker C on job 1
Run Code Online (Sandbox Code Playgroud)

匈牙利方法是解决这个问题的好方法吗?我应该只使用"虚拟"费用吗?我想也许可以使用工作偏好的指数作为成本; 这是一个好主意吗?

Dav*_*tat 6

匈牙利算法可以在这里工作,但是像Hopcroft-Karp这样的未加权最大二分匹配算法会更快.


Say*_*iss 5

将成本-1分配给他们可以执行的作业,其他则为零.

然后运行匈牙利算法,它会给你答案(实际上它会返回-answer).

不要用一些大数字,它可能会导致溢出(除非你非常小心地实施匈牙利).

实际上,它是二分图中的最大匹配,并且有很多方法可以解决这个问题,请参阅维基页面:

http://en.wikipedia.org/wiki/Matching_(graph_theory)#Maximum_matchings_in_bipartite_graphs

PS:Hopcroft-Karp算法比匈牙利语更快,也更简单.值得一试.一些编译方法比这两种方法更快,但不建议首先学习这些算法.

PSS:stackoverflow中的ID是解决此问题的方法.这是一种网络流量方式.它被称为最短参数路径(sap).见:http://coral.ie.lehigh.edu/~ted/files/ie411/lectures/Lecture11.pdf