BFS與DFS區別和特點


什么時候用DFS,什么時候用BFS?(DFS和BFS的特點和異同)

二維數組的題目,N小於20的,適用DFS。而一般 N<= 200,N<=1000這種,一定不可能用DFS去做。而且並不只是整個題目不能用DFS,其中的每一步也不能使用DFS。

BFS的基本步驟

1.將初始點(一個或多個)加入一個集合尾

2.從集合頭取出點,判斷初始點的周邊點,將符合條件的點加入隊列

3.重復2操作,直至集合為空。(一般每個點只加入隊列一次)

一般來說用DFS解決的問題都可以用BFS來解決。

DFS(深搜的同時考慮回溯)

bfs=隊列,入隊列,出隊列;dfs=棧,壓棧,出棧

 

bfs是按一層一層來訪問的,所以適合有目標求最短路的步數,你想想層層搜索每次層就代表了一步。bfs優先訪問的是兄弟節點,只有這一層全部訪問完才能訪問下一層,也就是說bfs第幾層就代表當前可以走到的位置(結點).而dfs是按遞歸來實現的,它優先搜索深度,再回溯,優先訪問的是沒有訪問過的子節點

DFS多用於連通性問題因為其運行思想與人腦的思維很相似,故解決連通性問題更自然。BFS多用於解決最短路問題,其運行過程中需要儲存每一層的信息,所以其運行時需要儲存的信息量較大,如果人腦也可儲存大量信息的話,理論上人腦也可運行BFS。
總的來說多數情況下運行BFS所需的內存會大於DFS需要的內存(DFS一次訪問一條路,BFS一次訪問多條路),DFS容易爆棧(棧不易"控制"),BFS通過控制隊列可以很好解決"爆隊列"風險。
它們兩者間各自的優勢需要通過實際的問題來具體分析,根據它們各自的特點來應用於不同的問題中才能獲得最優的性能。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM