algorithm - 具有源 S 和汇 T 的流网络,如何找到任意 2 个顶点之间的最大流?

标签 algorithm graph time-complexity

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

非常感谢

最佳答案

您面临的问题称为最大流算法,它有多个 solutions , 它们都是多项式的。

你可以使用 Ford–Fulkerson algorithm ,因为它很容易理解,而且正如您所见,wiki 页面包含您想要的关于该算法的所有内容。

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

要找到单一路径,您只需在 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)

关于algorithm - 具有源 S 和汇 T 的流网络,如何找到任意 2 个顶点之间的最大流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27590749/

相关文章:

python - 如何计算不循环需要循环多少次?

algorithm - 以最佳方式将矩形组合在一起

algorithm - 针对慢速 CPU 传输到快速 CPU 的纠错码

python - 衡量 python 脚本复杂性的问题

sorting - 为什么我们在最佳和平均情况下也使用大 O 表示法?

algorithm - 如何在不使用 fpga 除法的情况下找到数字的模乘逆?

javascript - 刷序数数据不起作用

python - 使用 Python 将数据发布到 Microsoft Graph

graph - 如何在图中找到最小生成树的总数?

python - 子集和算法在最坏的时候比 2^(n/2) 快一点?