将N个作业均匀分配给M个人,其中N>>> M

时间:2018-03-14 18:49:15

标签: algorithm

我有以下分配问题:

我想为M个人分配N个工作岗位(工作岗位多于人员),这样每个人都可以获得相同的工作。 假设每个人都为每个工作提供了可用性,我是否可以在这种情况下使用算法?

我尝试过像Ford-Fulkerson这样的算法,但这让我没有分配N-M的工作。

1 个答案:

答案 0 :(得分:0)

假设您尝试使用https://en.wikipedia.org/wiki/Assignment_problem解决此问题。你会立即发现你的工作比人多。对于一些小k,假装你有每个人的k份副本。然后你可以有kM> N.在这种情况下,创建任何人都可以做的虚拟工作来制作kM> N(如果kM< N你不能解决问题,那么你需要另一个k)。

如果分配问题找到了解决方案,那么您可以将人员分配给作业 - 并且每个人分配的作业不超过k个。因此,如果您找到可以解决问题的最小k,那么您可以进行相当均匀的分配 - 赋予最繁忙的人尽可能少的工作。

如果你二进制斩波找到k的最小值,你需要解决有关log(k)次的赋值问题。每个这样的问题都有kM人与kM工作,解决分配问题的成本约为O(n ^ 3),因此这可能很昂贵,但如果事实证明kM并不比N大很多,那么这可能是易处理的。