我有一个边加权无向图和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定理说,最小切割是那些边缘,流量等于它们的容量,并且由改进的Ford-Fulkerson所有边缘,这显然不是正确的切。
我在无向图中找到Stoer–Wagner algorithm for finding a global minimum cut,但这不是我想要的,因为这个算法不考虑任何源和接收器,并且可以找到切割,节点在同一个组件中。
是否有任何算法可以有效地找到带有源和接收器的无向图中的最小切割,将这两个指定的节点分开? 我可以以某种方式修改前面提到的算法,使它们适合我的情况吗?
答案 0 :(得分:0)
您可以使用Ford-Fulkerson算法的一些修改。
当您找到最大流量时,只需将无向边缘视为具有相同容量的两个有向边缘。
答案 1 :(得分:0)
最大流量最小切割定理说,最小切割是那些边,流量等于它们的容量......
这是不正确的。你已经举了反例。 this post 中给出了从最大流中找到最小割的正确算法。我在这里引用。
<块引用>最小割是将节点分成两组。
一旦找到最大流量,就可以通过创建找到最小割 残差图,当从 源到所有可达节点,这些节点定义了 划分。称这个分区为 A。其余的节点( 不可达的)可以称为 B。最小割的大小是 原始网络中流动的边的权重之和 从 A 中的一个节点到 B 中的一个节点。
所以,正如您所说,您可以将每条边转换为 2 个相反的有向边,计算新图中的最大流量,然后使用上述算法将最大流量转换为最小割。