什么时候用DFS,什么时候用BFS?(DFS和BFS的特点和异同)
二維數(shù)組的題目,N小于20的,適用DFS。而一般N<= 200,N<=1000這種,一定不可能用DFS去做。而且并不只是整個(gè)題目不能用DFS,其中的每一步也不能使用DFS。
BFS的基本步驟
1.將初始點(diǎn)(一個(gè)或多個(gè))加入一個(gè)集合尾
2.從集合頭取出點(diǎn),判斷初始點(diǎn)的周邊點(diǎn),將符合條件的點(diǎn)加入隊(duì)列
3.重復(fù)2操作,直至集合為空。(一般每個(gè)點(diǎn)只加入隊(duì)列一次)
一般來(lái)說(shuō)用DFS解決的問(wèn)題都可以用BFS來(lái)解決。
DFS(深搜的同時(shí)考慮回溯)
bfs=隊(duì)列,入隊(duì)列,出隊(duì)列;dfs=棧,壓棧,出棧
bfs是按一層一層來(lái)訪問(wèn)的,所以適合有目標(biāo)求最短路的步數(shù),你想想層層搜索每次層就代表了一步。bfs優(yōu)先訪問(wèn)的是兄弟節(jié)點(diǎn),只有這一層全部訪問(wèn)完才能訪問(wèn)下一層,也就是說(shuō)bfs第幾層就代表當(dāng)前可以走到的位置(結(jié)點(diǎn)).而dfs是按遞歸來(lái)實(shí)現(xiàn)的,它優(yōu)先搜索深度,再回溯,優(yōu)先訪問(wèn)的是沒(méi)有訪問(wèn)過(guò)的子節(jié)點(diǎn)
DFS多用于連通性問(wèn)題因?yàn)槠溥\(yùn)行思想與人腦的思維很相似,故解決連通性問(wèn)題更自然。BFS多用于解決最短路問(wèn)題,其運(yùn)行過(guò)程中需要儲(chǔ)存每一層的信息,所以其運(yùn)行時(shí)需要儲(chǔ)存的信息量較大,如果人腦也可儲(chǔ)存大量信息的話,理論上人腦也可運(yùn)行BFS。
總的來(lái)說(shuō)多數(shù)情況下運(yùn)行BFS所需的內(nèi)存會(huì)大于DFS需要的內(nèi)存(DFS一次訪問(wèn)一條路,BFS一次訪問(wèn)多條路),DFS容易爆棧(棧不易"控制"),BFS通過(guò)控制隊(duì)列可以很好解決"爆隊(duì)列"風(fēng)險(xiǎn)。
它們兩者間各自的優(yōu)勢(shì)需要通過(guò)實(shí)際的問(wèn)題來(lái)具體分析,根據(jù)它們各自的特點(diǎn)來(lái)應(yīng)用于不同的問(wèn)題中才能獲得最優(yōu)的性能。
總結(jié)
以上是生活随笔為你收集整理的什么时候用DFS,什么时候用BFS?(DFS和BFS的特点和异同)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: 交通银行中午休息吗?交通银行下午什么时候
- 下一篇: 1625 数字金字塔
