有没有一种算法可以在分离源和汇的无向图中找到最小割

Posted

技术标签:

【中文标题】有没有一种算法可以在分离源和汇的无向图中找到最小割【英文标题】:Is there an algorithm to find minimum cut in undirected graph separating source and sink 【发布时间】:2016-08-20 21:19:08 【问题描述】:

我有一个边加权无向图和 2 个节点(通常称为源和汇)。我需要找到一组可能权重最小的边,将这 2 个节点分成 2 个弱分量。

我知道Ford-Fulkerson's maximum flow algorithm 和他关于有向图上的maximum flow and minimum cut relation 的定理。

我还知道 Ford-Fulkerson 的无向图最大流算法的修改,它用 2 个相反的有向边替换每个无向边,并同时更新流向它们的流。但是通过这种修改,max-flow-min-cut-theorem 似乎不再有效,因为在以下无向图上,将无法正确确定最小切割:

nodes: 0, 1, 2, 3
edges & capacities: 0,1->5, 0,2->6, 1,2->2, 1,3->7, 2,3->4
source: 0
sink: 3

max-flow-min-cut theorem 说,最小割是那些边,流动等于它们的容量,而通过修正的 Ford-Fulkerson 就是所有的边,这显然不是正确的割。

我在无向图中找到了一个Stoer–Wagner algorithm for finding a global minimum cut,但这不是我想要的,因为该算法不考虑任何源和汇,并且可以找到一个切口,让节点位于同一个组件中。

是否有任何算法可以有效地在具有源和汇的无向图中找到最小割,分离这两个指定节点? 我可以以某种方式修改前面提到的算法以使它们适用于我的情况吗?

【问题讨论】:

如何通过将每个无向边替换为每个方向的 2 条边来将您的图转换为有向图? @SamSegers:这适用于流程,但不再适用于削减,我将尝试对此提出更多信息 @Youda008:为什么这不能用于寻找切口本身? 【参考方案1】:

您可以对 Ford-Fulkerson 算法进行一些修改。

    首先,您需要找到源和接收器之间的最大流量并记住它。 从图中删除一些边。 然后你需要在新图中找到最大流量。如果最大流量与第一步不同,则此边缘处于最小切割中。 将边返回图形,选择另一条边并转到第 2 步。

当您找到最大流量时,只需将无向边视为具有相同容量的两条有向边。

【讨论】:

我认为这行不通。如果移除任何非零流的边,全局流将始终改变。【参考方案2】:

max-flow-min-cut theorem说,最小切割是那些边,流量等于它们的容量......

这是不正确的。你已经给出了一个反例。在this post 中给出了从最大流中找到最小切割的正确算法。我在这里引用它。

最小切割是将节点分成两组。

找到最大流量后,可以通过创建 残差图,当从 源到所有可达节点,这些节点定义的一部分 划分。将此分区称为 A。其余节点( 不可达的)可以称为 B. 最小割的大小是 原始网络中流过的边的权重之和 从 A 中的一个节点到 B 中的一个节点。

因此,正如您所说,您可以将每条边转换为 2 条相反的有向边,计算新图中的最大流量,然后使用上述算法将最大流量转换为最小切割。

【讨论】:

以上是关于有没有一种算法可以在分离源和汇的无向图中找到最小割的主要内容,如果未能解决你的问题,请参考以下文章

最大流量和最小切割中的多个源和汇

Tarjan算法:求解图的割点与桥(割边)

是否有一种算法可以在无向图中找到成本最高的长度为 k 的路径

Tarjan算法介绍

POJ 2914 - Minimum Cut - 全局最小割,Stoer-Wagner算法

在具有特定成本的无向图中查找路径