algorithm - 除了求解大小为 n*m 的矩阵外,是否有与匈牙利方法类似的算法?
问题描述
除了求解大小为 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
推荐阅读
- c# - 如果我们有一个返回任务结果的 ASP.NET 异步操作,是否应该省略 async/await 关键字?
- javascript - 离子 - 在打字稿中检查“”
- javascript - 从页面获取所有超链接
- c# - 如何让文本框文本成为公共 C# 表单
- entity-framework-core - Entity Framework 3.0 Contains 不能像在 EF Core 2.2 中那样在 SQL 中翻译
- c# - 插入数据库时出现参数不足错误,但我没有包含的唯一字段是自动增量字段。我必须包括它吗?如何?
- ios - 如何全局保存一个人的 UID 以在 Swift 的任何 ViewController 中检索它
- ios - Apple 登录域验证失败
- tsql - 带有选择的更新语句中的多部分列名
- python - 如何使用 matplotlib.scatter 将颜色绘制为第三个变量的函数?