具有源S和接收器T的流网络,如何找到任何2个顶点之间的最大流量?

时间:2014-12-21 15:21:54

标签: algorithm graph time-complexity

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

非常感谢

1 个答案:

答案 0 :(得分:2)

您遇到的问题称为最大流算法,它有多个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算法检查)
  4. 因此算法的复杂性为:O(E log E)+ O(EV + E 2 )= O(EV + E 2 )< /强>