用于计算有向图的平方的算法(以邻接列表的形式表示)

时间:2017-04-10 04:20:08

标签: algorithm graph graph-algorithm

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

这是算法,我想出了:

顶点中的顶点
 在邻居中的邻居    在邻居中的n      如果(N!=邻居)
       则 - >如果(n.value ==邻居)
         将其添加到新的邻接列表中          打破; //这意味着我们在顶点和邻居之间找到了一条大小为2的路径        否则继续

1 个答案:

答案 0 :(得分:4)

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

以下是伪代码:

BFS

由于distance of 2需要时间 O(V + E),我们会为每个顶点调用此值,因此总时间为 O(V(V + E)) = O(V ^ 2 + VE) = O(VE)。请记住,每次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 } } 次遍历都要使用新的数据结构。