- 算法通關之路
- 路志鵬 俞俊 海凡路 黃樂興 李冰
- 381字
- 2021-10-15 18:32:06
第5章 深度優先遍歷和廣度優先遍歷
根據搜索方式的不同,搜索算法大致可以分為深度優先遍歷(Depth First Search,DFS)和廣度優先遍歷(Breadth First Search,BFS)。以樹為例,DFS的思路是沿著子樹盡可能深地搜索樹的分支,到達葉子節點后通過回溯重復上述過程,直到所有的節點都被訪問。BFS的思路則是一層一層地訪問節點,直到完成遍歷。
由于DFS和BFS的這種差異,BFS一般用來求解最短問題(dijkstra算法的特例),而DFS書寫起來比較簡單,因此對于不是最短問題的情況,我們優先考慮使用DFS。然而事無絕對,DFS 也可以解決最短問題,但是要注意棧溢出的問題。在很多情況下,兩者可以交替使用,比如本章要講的島嶼問題。
不管是DFS還是BFS,本質上都是搜索,而這樣的搜索通常來說都是暴力搜索,因此當需要對問題的所有可能情況進行窮舉時,我們就應該想到DFS和BFS。而第16章要講解的回溯法,也是DFS的一種,即也是一種暴力搜索方法,只不過回溯法會涉及前進和回溯的過程。