有向/無向圖的基本性質和操作

1. LeetCode上很多算法題目都可以抽象成 “圖” ,比如搜索類,tree類,迷宮問題,矩陣path問題等。

2. BFS和DFS比較

DFS 和 BFS 的比較
  • BFS 的time, space佔用都以 branching factor爲底, 到解的距離d爲指數增長;空間佔用上 Queue 是不會像 DFS 一樣只存一條path的,而是從起點出發越擴越大,因此會有空間不夠的風險,空間佔用爲 O(b^d)。
  • 因此BFS時間佔用O(b^d), 空間佔用O(b^d)
  • DFS 的time佔用以 branching factor 爲底,樹的深度 D 爲指數增長;而空間佔用上,卻只是 O(bD),可視化探索過程中只把每個 Node 的所有子節點存在 Stack 上, 探索完了再 pop 出來接着探,因此儲存的節點數爲 O(bD)。
  • 因此DFS時間佔用O(b^D), 空間佔用O(bD)

可以看到無論是 BFS 還是 DFS,樹的 branching factor 都是對空間與時間複雜度影響最大的參數;除此之外,BFS 中最重要的是到解的距離,而 DFS 看從當前節點的深度。普遍來講,DFS 空間上會經濟一些,當然也要分情況討論。

拓撲排序,是有向圖 graph 搜索中一種特殊的順序,本質上還是完全可以靠 BFS / DFS 解決。

+


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章