gar*_*cat 3 algorithm graph breadth-first-search depth-first-search data-structures
leetcode课程安排:https ://leetcode.com/problems/course-schedule/
这个问题涉及到检测一个循环,如果有一个循环,那么你就无法完成所有课程。
我听说最推荐使用 DFS 来检测周期,但建议使用 Kahn 算法来解决课程安排问题,这是一种 BFS 解决方案。
那么..是哪一个?DFS 和 BFS 哪个更适合检测循环?
两者的时间复杂度均为 O(V+E),空间复杂度均为 O(V+E)。因此,从这些角度来看,没有赢家。
一个使用队列,另一个使用堆栈。一个使用每个节点的度数,另一个使用每个节点的访问标记。
一个区别是 DFS 可以通过递归使用隐式堆栈,这可能会使代码更加紧凑。但话又说回来,您会受到可用调用堆栈空间的限制,因此对于大输入来说,使用递归可能不是一个可行的解决方案,并且使用显式堆栈最终可能是基于 DFS 的解决方案的选择。
所以总而言之,它们是平等的。选择其中之一。