在有向图中彼此无法访问的顶点对

时间:2014-12-15 23:17:38

标签: algorithm time-complexity graph-algorithm

我被要求设计一种算法来确定在有向图中是否存在任何彼此不可达的顶点对。算法必须在 O(| V | + | E |)时间

中运行

含义:顶点 i 无法到达顶点 j ,而顶点 j 无法到达顶点 i

我已经阅读了有关查找强连通组件的方法,我想知道我是否可以从那里开始并设计一种在当前情况下可用的算法?

3 个答案:

答案 0 :(得分:0)

以下是一些帮助您入门的提示:

  1. 当您给出的图表是DAG时,请先尝试解决此问题。为了使任何节点对至少弱连接,DAG的结构必须是什么?

  2. 如果计算图表中强连接的组件,那些SCC本身就会形成DAG。您是否可以结合第(1)部分的算法使用此观察结果来形成适用于任意图形的算法?

  3. 希望这有帮助!

答案 1 :(得分:0)

如果您可以在要求的线性O(V + E)时间内找到所有强连接组件,那么您就完成了。这似乎有点矫枉过正,但它解决了这个问题。为了找到所有强连通分量,假设你的图表被表示为邻接表,也许最简单的O(V + E)线性时间算法是Kosaraju,参见例如http://en.wikipedia.org/wiki/Kosaraju%27s_algorithm

一旦找到所有强连接组件,那么通过考虑节点是强连接组件且存在边缘的压缩图,测试是否存在一对未通过任何路径连接的强连接组件相当简单如果从两个连接的组件中选择的任何两个节点之间存在边缘。

答案 2 :(得分:0)

如果您能够找到强连接组件,那么您反过来也知道未连接的顶点。

维基:http://en.wikipedia.org/wiki/Kosaraju%27s_algorithm非常有启发性。我已经实现了算法,它可以在这里找到。在O(v + E)中运行。我们假设图形作为邻接列表支持。

Kosaraju Implementation in Java

的链接

尝试一下,希望你找不到错误:-)