DFS與BFS之間的區別

2021-07-10 14:26:21 字數 530 閱讀 4475

一般來說用dfs解決的問題都可以用bfs來解決。

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

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

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

dfs多用於連通性問題因為其執行思想與人腦的思維很相似,故解決連通性問題更自然。bfs多用於解決最短路問題,其執行過程中需要儲存每一層的資訊,所以其執行時需要儲存的資訊量較大,如果人腦也可儲存大量資訊的話,理論上人腦也可執行bfs。

總的來說多數情況下執行bfs所需的記憶體會大於dfs需要的記憶體(dfs一次訪問一條路,bfs一次訪問多條路),dfs容易爆棧(棧不易"控制"),bfs通過控制佇列可以很好解決"爆佇列"風險。

它們兩者間各自的優勢需要通過實際的問題來具體分析,根據它們各自的特點來應用於不同的問題中才能獲得最優的效能。

BFS和DFS的區別與分析

深度優先遍歷 對每乙個可能的分支路徑深入到不能再深入為止,而且每個結點只能訪問一次。要特別注意的是,二叉樹的深度優先遍歷比較特殊,可以細分為先序遍歷 中序遍歷 後序遍歷 我們前面使用的是先序遍歷 具體說明如下 先序遍歷 對任一子樹,先訪問根,然後遍歷其左子樹,最後遍歷其右子樹。中序遍歷 對任一子樹,...

dfs和bfs的區別

詳見 部落格 回溯法是一種搜尋法,按條件向前搜尋,以達到目標。但當探索到某一步時,發現原先選擇達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法 例如這張圖,從1開始到2,之後到5,5不能再走了,退回2,到6,退回2退回1,到3,一直進行 void dfs int deep 這裡可能...

DFS與BFS的區別 用法 詳解?

寫在最前的三點 1 所謂圖的遍歷就是按照某種次序訪問圖的每一頂點 一次僅且一次。2 實現bfs和dfs都需要解決的乙個問題就是如何儲存圖。一般有兩種方法 鄰接矩陣和鄰接表。這裡為簡單起 見,均採用鄰接矩陣儲存,說白了也就是二維陣列。3 本文章的小測試部分的測試例項是下圖 一 深度優先搜尋遍歷 1 從...