问题描述
是否有与匈牙利方法类似的算法,但用于求解大小为 n*m 的矩阵?
(n - 工人,m - 任务,m > n,每个工人必须至少有 1 个任务)
添加虚拟工人的变体是不正确的,因为在这种情况下,至少有 1 个任务将没有工人。
示例:
T1 | T2 | T3 | T4 | |
W1 | 2 | 9 | 6 | 3 |
W2 | 2 | 3 | 5 | 7 |
W3 | 5 | 5 | 7 | 2 |
结果是:
W1 - T2
W2 - T4
W3 - T1、T3
解决方法
如果您希望将每个任务分配给一个工作人员,即使这意味着每个工作人员分配了多个任务,请使用虚拟行运行一次算法
T1 | T2 | T3 | T4 | |
W1 | 2 | 9 | 6 | 3 |
W2 | 2 | 3 | 5 | 7 |
W3 | 5 | 5 | 7 | 2 |
D1 | 0 | 0 | 0 | 0 |
这会将 W1 分配给 T1,W2 分配给 T2,W3 分配给 T4,D1 分配给 T3。由于 T3 被分配给一个虚拟工人,它基本上没有被分配。如果您删除分配给工作人员的所有任务并添加虚拟列,您可以使用
再次运行它D1 | D2 | T3 | |
W1 | 0 | 0 | 6 |
W2 | 0 | 0 | 5 |
W3 | 0 | 0 | 7 |
这会将 T3 分配给 W2。所以最后的任务是:
W1到T1
W2到T2和T3
W3到T4