dfs和拓扑排序有区别吗?不使用dfs能实现拓扑排序吗?
Is there a difference between dfs and topological sort? Can topological ordering be achieved without using dfs?
我试图编写代码来检测有向图中的循环,如果没有循环,则 return 相同的拓扑顺序。
在搜索它时,我遇到了不同的技术,例如 DFS 和拓扑排序来检测有向图中的循环。
这两者有什么区别吗?
嗯,拓扑排序是有向无环图的节点的特定顺序,can be achieved by depth-first search. Besides depth-first search, there are other methods to find the topological order, like the Kahn's algorighm。
拓扑排序是一种在有向无环图 (DAG) 上基于 DFS 的算法。拓扑排序是顶点的线性排序,使得对于每个有向边 uv,顶点 u 在排序中位于 v 之前。
当且仅当图没有有向环时,拓扑排序是可能的。但是DFS可以在有向图和无向图上进行。
拓扑排序按以下方式使用 DFS:
- 调用 DFS
- 注意所有边都被探索过(即完成
次)
- 一个顶点完成后,在头部插入一个标识符
拓扑排序 L
- 完成的列表L是拓扑排序
运行-时间:O(V+E)
本质上,拓扑排序算法在 DAG 上使用 DFS。 DFS 属性对于返回列表以正确的拓扑顺序显示至关重要。但是,如上面的答案所示,不使用 DFS 就无法实现 yes 排序。例如 Kahn's algorithm 和并行排序。
想要思路清晰,可以试试下面的问题
起初,您可能会直接进行 DFS,但在某些情况下会失败。
例如:DFS 在以下测试用例中失败:
5 4(分别是顶点数和边数)
(边的描述)
1 2
2 3
1 4
4 3
我试图编写代码来检测有向图中的循环,如果没有循环,则 return 相同的拓扑顺序。
在搜索它时,我遇到了不同的技术,例如 DFS 和拓扑排序来检测有向图中的循环。
这两者有什么区别吗?
嗯,拓扑排序是有向无环图的节点的特定顺序,can be achieved by depth-first search. Besides depth-first search, there are other methods to find the topological order, like the Kahn's algorighm。
拓扑排序是一种在有向无环图 (DAG) 上基于 DFS 的算法。拓扑排序是顶点的线性排序,使得对于每个有向边 uv,顶点 u 在排序中位于 v 之前。
当且仅当图没有有向环时,拓扑排序是可能的。但是DFS可以在有向图和无向图上进行。
拓扑排序按以下方式使用 DFS:
- 调用 DFS
- 注意所有边都被探索过(即完成 次)
- 一个顶点完成后,在头部插入一个标识符 拓扑排序 L
- 完成的列表L是拓扑排序
运行-时间:O(V+E)
本质上,拓扑排序算法在 DAG 上使用 DFS。 DFS 属性对于返回列表以正确的拓扑顺序显示至关重要。但是,如上面的答案所示,不使用 DFS 就无法实现 yes 排序。例如 Kahn's algorithm 和并行排序。
想要思路清晰,可以试试下面的问题
起初,您可能会直接进行 DFS,但在某些情况下会失败。
例如:DFS 在以下测试用例中失败:
5 4(分别是顶点数和边数)
(边的描述)
1 2
2 3
1 4
4 3