我正在尝试为以下问题找到有效的解决方案:
问题:假设我有一些任务(A、A、B、B、C)并且我有一些人可以执行以下一项或多项任务:
- 人1:A,B(人1可以做任务A或任务B)
- 人2:A,C
- 人3:A
- 人4:B,C
- 人5:A,B
是否可以将我所有的任务交给这些人?一个人只能完成一项任务。
可能有多种解决方案,但我只想知道是否有解决方案。
我第一次尝试有效地解决这个问题是:
- 如果一个人只能完成一项任务,则将该任务分配给该人
- 如果一项任务需要完成 n 次,并且有 n 个人可以完成此任务,则将此任务分配给这 n 个人。
这足以解决上述问题。
- 2个人可以做B,B需要做两次。
- 剩余任务:A,A,C
- 剩余人数:[A,C],[A],[B,C]
- 2人可以做A。
- 剩余任务:C
- 剩余人数:[B,C]
但这还不足以解决更复杂的问题,例如: 工作:IGGGFFDDCCBBB 人员:ABCDEFG CEI BEI CEFGI CEGI ADGI CEGI CI ADG BEI DI BCDEFI ABDF ABEFG BCEGI ACDI BD ABE BCDEFGI
有没有解决这个问题的有效方法?我显然可以用深度优先搜索算法解决这个问题,但我想知道我是否可以在多项式时间内解决这个问题?我不禁相信这是一个众所周知的问题,但我一直无法在谷歌上找到它。
感谢您阅读:)