【问题标题】:Strongly Connected Components : Kosaraju algorithm强连通分量:Kosaraju 算法
【发布时间】:2019-04-06 08:52:39
【问题描述】:

在 Kosaraju 算法中,我遇到了两种可能的实现:

1) 按照原图中顶点的拓扑顺序,在逆向图中搜索强连通分量。

2) 按照逆向图中顶点的拓扑顺序搜索原图中的强连通分量。

我想在原始图中使用反向拓扑顺序的顶点搜索强连通分量是错误的。这在内存方面会更好,因为不需要新的邻接列表。

来源:1)E-Maxx,2)CLRS 书

【问题讨论】:

  • 请注意,反转图的强连通分量与原图相等。所以,1)和2)都是有道理的。您是否要求 Korasaju 算法不需要计算反转图?为什么不需要新的邻接表?
  • 是的,我声称不需要反向图,但我不确定,因为我无法提供证明。另外,如果我是对的,人们不应该使用反转图,因为这会节省内存:)
  • “不需要反向图”是什么意思? kosaraju 的算法需要两次图遍历:一次用于原始图,一次用于反转图。其他算法支持单次遍历,例如tarjan的
  • @mangusta 我的意思是我们必须为反向图创建一个新的邻接表,但是,如果我们只是按照原始图的反向拓扑顺序进行遍历,我们就不必创建反向邻接表.
  • 我花了很多时间想出一个反例,但没有。我希望有人能回答这个..

标签: graph-theory depth-first-search strongly-connected-graph


【解决方案1】:

Kosaraju 算法 是一种线性时间算法,用于查找适用于有向图和无向图的强连通分量。为了更容易,我们可以在图中说,如果任何一组节点构成一个循环,则为 强连通分量(SCC)。 如果我们谈论解决此问题的蛮力方法,我们可以按照以下步骤操作:

  1. 使用以下方法查找所有对的最短路径 弗洛伊德沃歇尔算法
  2. 检查任意两对之间的距离是否为无穷大,即不可达,则不是SCC,否则为SCC

如果我们谈论这种方法的复杂性,它将花费立方时间,即 O(v^3)。因此,我们可以使用 Kosaraju 算法 优化这种方法,该算法可以在 O(n+m) 时间内运行我们的算法。使用Kosaraju算法解决强连通分量问题的步骤是:

  1. 在图上执行深度优先搜索(DFS)并将节点推送到堆栈。
  2. 通过反转图的边缘来找到图的转置。
  3. 从堆栈中逐一弹出节点,然后在修改后的图上再次执行 DFS

每个成功的 DFS 都会有五个 1-SCC 强连通分量。这就是 Kosaraju 算法O(n+m) 时间内的工作原理其中 n 是图中的节点数,m 是边数。

【讨论】:

    【解决方案2】:

    术语问题:

    您在谈论拓扑排序,但当且仅当图是 DAG(有向无环)时,拓扑排序才存在。如果您只想使用 DAG,那么您已经拥有 SCC(强连接组件),因为每个顶点都是其自身的组件。如果您想在有向图上找到 SCC,则需要将 拓扑排序 更改为 DFS 完成时间。 CLRS 书只提到完成时间f[u]

    1. 调用DFS(G^T),但是在DFS的主循环中,按照f[u]递减的顺序考虑顶点...

    重新表述您的问题:

    在原图中搜索强连通分量考虑顶点以增加完成时间的顺序是不是错误f[u]

    答案:

    是的,错了。

    反例:考虑下图:

    其中包含两个组件 CC'。如果您运行第一个 DFS(从节点 u 开始),您最终会得到以下两个列表之一,按完成时间升序排列:

    DFS 列表 1:{v,w',w,u}

    DFS 列表 2:{w',v,w,u}

    您实际上要问的是您是否可以在原始图表上从头开始处理这些列表。如果您选择第一个列表,您将通过从节点 v 开始的 DFS 搜索提取组件 C',然后通过从节点 w' 开始的 DFS 搜索提取组件 C。但是,如果您选择第二个列表并从原始图上的节点 w' 开始 DFS,您将只得到一个组件(整个图),这是错误的。

    请注意,Kosaraju 的算法在这两种情况下都有效,因为它从列表的末尾(两种情况下的节点 u)开始,并通过反向图上的 DFS 搜索提取组件 C。稍后当我们到达列表中的节点v 时,将提取组件C'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-25
      • 1970-01-01
      • 1970-01-01
      • 2013-03-30
      • 2011-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多