日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

什么时候用DFS,什么时候用BFS?(DFS和BFS的特点和异同)

發布時間:2023/12/13 综合教程 20 生活家
生活随笔 收集整理的這篇文章主要介紹了 什么时候用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通過控制隊列可以很好解決"爆隊列"風險。
它們兩者間各自的優勢需要通過實際的問題來具體分析,根據它們各自的特點來應用于不同的問題中才能獲得最優的性能。

總結

以上是生活随笔為你收集整理的什么时候用DFS,什么时候用BFS?(DFS和BFS的特点和异同)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。