使用Maximum Flow,更难的版本为人员分配作业

时间:2013-06-05 08:20:24

标签: algorithm graph graph-algorithm network-flow ford-fulkerson

我正在研究最大流量,并且存在这个问题:

最初的问题是

  • 假设我们有一份工作清单

    {J1,J1,...,Jm}

  • 以及已申请的人员列表

    {P1,P2,P3,...,Pn}

  • 每个人都有不同的兴趣,其中一些人申请了多个工作(每个人都有一份工作清单)

  • 不允许任何人从事3个以上的工作。

因此,可以通过在下图中找到最大流量来解决此问题 enter image description here

我理解这个解决方案,但是

问题的难度

如果添加这些条件怎么办?

  • 简易版的前3个条件(工作和人员清单以及每个人都有兴趣或能力清单)仍然相同

  • 该组织仅雇用Vi人员来工作

  • 该组织希望雇用尽可能多的人

  • 一个人可以从事的工作数量没有限制。

我应该在图表中有什么不同,以便我的解决方案也能满足这些条件?或者如果我需要不同的方法,请告诉我。

在任何人说什么之前,这不是功课。这只是自学,但我正在研究最大流量,问题出在那个区域,所以解决方案应该使用最大流量。

1 个答案:

答案 0 :(得分:1)

  • 对于单个工作的多人:

    Jit的边缘的容量将等于该作业的人数。例如。如果作业#1可以有三个人,则从J1t的边缘可以转换为三个。

  • 关于雇用尽可能多的人的要求:

    我不认为使用单个流程图可以实现这一点。这是可以完成的算法:

    1. 运行一次flow-algorithm。
    2. 每个人:
      1. 尝试将输入容量减少到低于当前流量的容量。
      2. 再次运行flow-algorithm。
      3. 虽然这不会减少总流量,但请从(2.1。)重复。
      4. 将容量增加1,以恢复最大流量。
    3. 直到没有其他人加入为止,重复(2.)
  • 对工作数量没有限制:

    sPi的边缘的最大流量将等于该人的适用作业数量。