当前位置: 首页 > 知识库问答 >
问题:

用最大流算法求网络的边连通度

罗学真
2023-03-14

我想用最大流算法(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)次max flow算法)而不是O(V^2)个

共有1个答案

孔永年
2023-03-14

在图中区分节点v。对于v以外的每个w计算从vw的最大流量。由于v必须在图的全局最小割的一端,而其他部分必须在另一端,因此这些流中的一个将标识全局最小割。

Hao和Orlin有一个诀窍,如果你使用一个预流推算法,一个全局最小割的计算花费的时间和一个最小(s,t)割问题花费的时间差不多。它有实用的好处。Karger有一个随机算法,它在O(n polylog(n))时间内完成,但我不知道任何实现,更别提快速实现了。

 类似资料:
  • 我正在解决编程中一个有趣的问题。它是这样的:我们不断地给一个图添加无向边,直到这个图(或子图)是连通的(即我们可以使用某种路径从那个子图中的每个顶点到达任何其他顶点)。图一连接起来我们就停下来。例如,如果我们有顶点1,2,3和4,我们希望子图1,2,3是连通的。假设我们有边(3,4),然后(2,3),然后(1,4),然后(1,3)。我们只需要添加前3条边来连接子图,然后我们停止(边1,3是不需要的

  • 我试着解决一个关于最大流量问题的问题。我有一个源和两个汇。我需要在这个网络中找到一个最大流量。这部分是一般最大流量。然而,在这种特殊的最大流问题中,两个目标必须得到相同的流量。 有没有人能帮助我,我该怎么做呢?

  • 这个问题与LeetCode在网络中的关键连接非常相似。给定一个无向图,我们想要找到所有的桥。无向连通图中的一条边是一个桥,如果去掉它就会断开图的连接。 变体 而不是找到所有的桥,我想最大限度的边的数量,以删除,使图保持连接。 实施例2

  • 首先定义Dijkstra算法: Dijkstra的算法在有向图中寻找具有非负边权的单源最短路径。 如果我有源和目的地T,我可以用Dijkstra算法在这两个顶点之间找到一条最短路径,但这里的问题是我想找到这两个顶点之间的最短路径,这两个顶点之间的边数不超过形式k。 第一部分是Dijkstra算法,第二部分是BFS算法,因为我们可以用BFS算法在无权图中找到最短路径。 所以我想知道有没有一种方法,可

  • 我有m行,其中x和y值用空格分隔,表示用户id。这就像用户x在Facebook或Instagram上跟踪用户y一样。现在如果我们有一对z和y,那么由于z跟踪y,因为我们已经有一个组[x,y],那么我们可以合并z形成[x,y,z] 例: 我们可以有以下组: [1 2 5 6]和[3 4],最大组[1,2,5,6]的长度为4将是答案。 这是我对此的方法: 我的方法本身是错误的,因为我生成的列表没有正确

  • 我在尝试解决求MaxDoubleSliceSum值的问题。简单地说,它是任何切片的最大和减去该切片中的一个元素(您必须删除一个元素,并且第一个和最后一个元素也被排除在外)。因此,从技术上讲,数组的第一个和最后一个元素不能包含在任何片和中。 以下是完整描述: 给出了一个非空的零索引数组由整数组成。三元组,使得 使得: 包含以下双切片示例: 双切片,总和 在给定由< code>N个整数组成的非空零索引