【问题标题】:Algorithm to Compute square of a directed graph(represented in form of an adjacency list)计算有向图平方的算法(以邻接表的形式表示)
【发布时间】:2017-04-10 04:20:07
【问题描述】:

我正在构建一种算法来计算有向图的 G^2,该有向图是邻接表的一种形式,其中 G^2 = (V,E'),其中 E' 定义为 (u,v )∈E' 如果在 G 中 u 和 v 之间存在长度为 2 的路径。我非常理解这个问题并且找到了一个我认为是正确的算法,但是我的算法的运行时间是 O(VE^2) 其中V 是顶点数,E 是图的边数。我想知道如何在 O(VE) 时间内做到这一点以提高效率?

这是我想出的算法:

对于顶点中的顶点
邻居的邻居
邻居中的 n
如果(n!=邻居)
那么-> if(n.value==neighbor)
将此添加到新的邻接列表
休息; // 这意味着我们在顶点和邻居之间找到了一条大小为 2 的路径
否则继续

【问题讨论】:

    标签: algorithm graph graph-algorithm


    【解决方案1】:

    使用BFS(广度优先搜索)可以及时O(VE)解决问题。 BFS 的问题在于它遍历了图形 level by level。这意味着它首先从source vertex 遍历distance of 1 处的所有顶点。然后它从source vertex 遍历distance of 2 处的所有顶点,依此类推。所以我们可以利用这个事实并在到达distance of 2 的顶点时终止我们的BFS

    以下是伪代码:

    For each vertex v in V
    {
     Do a BFS with v as source vertex
     {
      For all vertices u at distance of 2 from v
      add u to adjacency list of v 
      and terminate BFS
     }
    }
    

    由于BFS 需要时间O(V + E),我们为每个顶点调用它,所以总时间为O(V(V + E)) = O(V^2 + VE) = O(VE) 。记住每次BFS 遍历都从新的数据结构开始。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-12
      • 1970-01-01
      • 1970-01-01
      • 2022-11-21
      • 2014-04-01
      • 1970-01-01
      相关资源
      最近更新 更多