【问题标题】:Max flow to find the most profitable arrangement最大流量以找到最有利可图的安排
【发布时间】:2016-09-16 15:15:04
【问题描述】:

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。你能解释一下吗?
  • 我们不能只看流去哪里找到这两个子集吗?

【问题讨论】:

    标签: algorithm graph computer-science


    【解决方案1】:

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

    我们可以很容易地看到一个有限解是可能的:考虑在一侧具有{s} 并且在另一侧具有其他节点的切割。很明显,这个cut的值是q_i的和,是有限的。

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

    关键部分如下:任何不满足声明中给出的限制的削减都将具有无限价值,因为从投资者到跨越削减的参与者都会有优势。正如我们之前看到的,存在有限解,因此 mincut 将满足这些限制。

    现在,我们要最小化什么?忽略无限边,如果我们为电影选择了那个演员,则将一个演员边缘添加到价值中,如果我们不为这部电影选择那个投资者,则添加一个投资者边缘。我们想要最大化收益,这与最小化我们可能失去的东西是一样的。

    【讨论】:

    • 感谢您的详细解答。我仍然没有完全理解一些东西;我们正在寻找最大流量。因此,我们有点希望增加演员的资金(所以更多的流量将流向t)。但我们实际上需要将其降低到最低限度。你能帮我解开这个误会吗?
    • 忘记最大流量本身,我认为混乱来自于它。如上所述,问题陈述转换为 mincut 问题,这里没有 maxflow(忽略对偶性)。所以我们要解决一个最小割问题。我们如何做到这一点?最好的算法去对偶问题(maxflow),解决它并将其转换回最小割。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 2011-05-27
    • 2013-07-05
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    相关资源
    最近更新 更多