我想找到使用最大流算法(Edmond Karp / Ford-Fulkerson算法)的无向图的边连通性(即要删除的最小边数)(
)我知道我可以通过查找图表中每两个节点之间的最小最大流量来完成此任务,但这会导致O(| V | ^ 2)个流量网络数量,
int Edge-Connectivity(Graph G){
int min = infinite;
for (Vertex u: G.V){
for (Vertex v: G.V){
if (u != v){
//create directed graph Guv (a graph with directed edges and source u and sink v)
//run Edmonds-Karp algorithm to find the maximum flow |f*|
if (min > |f*|)
min = |f*|;
}
}
}
return min;
}
但我想用| V |来做这件事流网络(仅运行最大流量算法O(| V |)次数)而不是O(| V | ^ 2)
答案 0 :(得分:7)
区分图表中的节点v
。对于除w
以外的v
以外的每个v
计算从w
到v
的最大流量。由于{{1}}必须位于图表的全局最小割集的一边,而其他一些必须位于另一边,因此其中一个流将识别全局最小割减。
由于Hao和Orlin的原因,如果使用预流推送算法,全局最小切割计算需要与最小(s,t)切割问题一样多的时间。它具有实用性的好处。 Karger有一个随机算法,它在O(n polylog(n))时间内完成,但我不知道任何实现,更不用说快速实现了。