Ati*_*esh 5 algorithm depth-first-search kosaraju-algorithm
有一个著名的算法来寻找强连通分量Kosaraju's algorithm
,它使用两个 DFS 来解决这个问题,并且?(|V| + |E|)
及时运行。
首先,我们在图 ( G
R ) 的补上使用 DFS来计算顶点的逆后序,然后我们G
通过以逆后序取顶点来计算强连通分量,在主图上应用第二个 DFS 。
虽然我了解算法的机制,但我没有得到反向后序需求背后的直觉。
它如何帮助第二个 DFS 找到强连接组件?
小智 3
假设第一次DFS的结果是:
----------v1--------------v2-----------
其中“-”表示任意数字,并且强连通分量g中的所有顶点都出现在v1和v2之间。
DFS 邮寄订单提供以下保证:
总之,第一个DFS确保在第二个DFS中,较早访问过的强连通分量不能有任何边缘点指向其他未访问过的强连通分量。
我们将图简化如下:
该算法可能失败的情况可以总结为
原图就像g-->v
,而反转图看起来像g'<--v
。
要从 v 启动第二个 DFS,第一个 DFS 生成的后序需要类似于
g1, g2, g3, ..., v
但是你会很容易发现,无论是从v开始还是从g'开始第一个 DFS 都不能给你这样的后序,所以在这种情况下,保证第一个 DFS 不会从第一个 DFS 开始,第二个 DFS 不会从两个顶点都开始出自并指向强连通分量。
与情况1类似,在情况2中,原图是g<--v
,逆图是g'-->v
,保证v会在g '中的任何顶点之前被访问。
归档时间: |
|
查看次数: |
2683 次 |
最近记录: |