【问题标题】:Flow network with source S and sink T, How to find maximal flow between any 2 vertex?具有源 S 和汇 T 的流网络,如何找到任意 2 个顶点之间的最大流量?
【发布时间】:2014-12-21 15:21:54
【问题描述】:

给定一个具有源 s 和汇 t 的流网络。对于每两个节点 u,v,假设从 u 到 v 的容量与从 v 到 u 的容量相同。给定两个顶点 x、y,设计一个多项式时间算法来找到从 x 到 y 的一条路径,您可以沿着该路径发送尽可能多的流量。 简要证明您的算法的正确性并分析运行时间。

非常感谢

【问题讨论】:

  • 韦伯我的第一个答案不是你想要的,所以我只是编辑了我的答案,如果你不理解我的答案的任何部分,请检查并告诉我。

标签: algorithm graph time-complexity


【解决方案1】:

你面临的问题叫做最大流算法,它有多个solutions,而且都是多项式的。

你可以使用Ford–Fulkerson algorithm,因为它很容易理解,并且你可以看到维基页面有你想要的关于这个算法的所有东西。

编辑:我之前提供的答案并没有给你单一的路径,而是给你最大的流量。

要找到单一路径,您只需在 x 和 y 之间的每条路径中找到瓶颈。瓶颈是指路径中容量最低的边缘,因为路径的容量就是该边缘的容量。

为了找到每条路径中的最低容量,您可以简单地从图表中从最低容量到最高容量开始移除边,并从图表中移除每条边,只需检查 x 和 y 是否连接。使 x 和 y 断开连接的第一条边是您想要的边,它的容量就是您想要的容量。因为 x 和 y 之间的每条路径要么有这条边,要么有一条容量较低的边。

算法的时间复杂度:

  1. 排序边缘:O(E log E)。
  2. 删除每条边,直到找到所需的边:O(E)。
  3. 在第二步检查连通性:O(V + E)(使用Strongly connected component算法检查)

所以算法的复杂度是:O(E log E) + O(E V + E2) = O(E V + E2)

【讨论】:

  • 问题不完全是最大流量问题。在这个问题中,我们必须沿着一条路径发送一个流,而在最大流问题中,我们可以通过多条路径发送它。
  • @SaeedAmiri 我刚刚编辑了我的答案并发布了关于这个问题的答案。
  • @WebberChiang 如果您觉得有用,请将其标记为答案 :) meta.stackexchange.com/questions/5234/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-11
  • 1970-01-01
  • 2020-08-14
  • 2014-07-10
  • 1970-01-01
  • 2020-03-26
  • 1970-01-01
相关资源
最近更新 更多