最大流量找到最有利可图的安排

时间:2016-09-16 15:15:05

标签: algorithm graph computer-science

  

a_1, ..., a_n个演员。每个演员的成本为c_1, ..., c_n。此外,我们有投资者,b_1,..., b_m这样每个投资者都愿意为我们的电影投入q_j钱。如果所有他喜欢的演员都参与我们的电影,那么投资者就会在我们的电影中投入资金。   当然,我们可能有多个投资者。找到参与者/投资者的子集以最大化我们的利润(即投资总和减去工资总额)

基本上,解决方案是将一些顶点s连接到具有权重q_i边缘的每个投资者。接下来,我们将每位投资者与重量级infinity的优势演员联系起来。最后,我们将每个actor连接到具有权重t边缘的某个顶点c_i

然后,我们寻找最大流量。

我的问题是:

  • 为什么会这样?
  • 我被告知为了找到演员/投资者的子集,我们需要查看最小切割(S,T),然后我们有:picked_investors = S ∩ investorspicked_actors = S ∩ actors。你能解释一下吗?
  • 我们不能只看流程找到这两个子集的位置吗?

1 个答案:

答案 0 :(得分:2)

此算法基于最大流量 - 最小切割对偶性。让我们分析一下这个图表中的mincut是什么样的。

我们可以很容易地看到有限的解决方案是可能的:考虑在一侧具有{s}而在另一侧具有其他节点的切割。显然,这个切割的值是q_i的总和,它是有限的。

现在让我们看一下此图中切割的含义。如果投资者与削减中的s处于同一侧,则意味着他/她将投资他/她的钱。如果演员与剪辑中的s位于同一侧,则意味着他也将参与该电影。处于剪辑的另一边意味着不参与电影(对演员和投资者而言)。

关键部分如下:任何不满足声明中给出的限制的削减将具有无限的价值,因为投资者将有一个优势,即跨越削减的行为者。正如我们之前看到的,存在一个有限的解决方案,因此mincut将满足限制。

现在,我们最大限度地减少了什么?忽略无限边缘,如果我们为电影选择该演员,则会将一个演员边缘添加到该值中,如果我们不为电影选择该投资者,则会添加投资者优势。我们希望最大限度地发挥效益,这与最大限度地减少我们失去的东西相同。