拓扑排序的方法是BFS还是DFS,哪个是正确的?
(我认为BFS是正确的,但有些网站说DFS和BFS也有人说。我很困惑...)Kahn算法和BFS(或DFS)相同吗?还是BFS(或DFS)只是Kahn算法的工具?
拓扑排序的方法是BFS还是DFS,哪个是正确的?
(我认为BFS是正确的,但有些网站说DFS和BFS也有人说。我很困惑...)
Kahn算法和BFS(或DFS)相同吗?还是BFS(或DFS)只是Kahn算法的工具?
Kahn算法和DFS都可以用于实践中的拓扑排序。选择哪一个取决于您的图形及其表示方式:
如果您没有轻松访问所有顶点的列表(例如,当您仅获得对图的根的引用时),则在实现Kahn算法之前必须搜索所有顶点,因此您可能想使用DFS同时进行拓扑排序。
如果您的图形可能具有长路径,则不适宜使用递归搜索。DFS实现应使用显式堆栈,这使其比Kahn算法更复杂。如果您确实有所有顶点的列表,则可能要改用Kahn算法。
如果上述选项均不适用或均适用,则两种方法差别不大,您可以使用喜欢的那一种。在这种情况下,我通常使用Kahn算法,因为检测输入图中的循环更容易使其快速且健壮。