我一直在研究 SCC 和有关它们的算法,并且我看到人们几乎总是提到 Kosaraju 的算法找到 SCC 并以(反向)拓扑排序对其进行排序。
我的问题是:Tarjan 的算法不是也找到了(反向)拓扑排序吗?我发现它没有被提及(至少从我读过的地方,维基百科除外)。
我一直在考虑它并且完全有道理。当在某个节点 u 上调用 tarjans_dfs 时,所有可以从 u 到达的 SCC 都将在 u 的 SCC 之前找到。我错了吗?
维基百科说它确实找到了它:
“虽然每个强连接组件中节点的顺序没有什么特别之处,但该算法的一个有用特性是,在其任何继任者之前不会识别强连接组件。因此,强连接组件的顺序是识别构成了由强连接组件形成的 DAG 的反向拓扑排序。”
是我的想法,还是说 Kosaraju 的算法找到拓扑顺序比 Tarjan 的算法也能找到拓扑顺序更广为人知?