DFS与BFS的总结
BFS與DFS的討論:BFS:這是一種基于隊列這種數據結構的搜索方式,它的特點是由每一個狀態可以擴展出許多狀態,然后再以此擴展,直到找到目標狀態或者隊列中頭尾指針相遇,即隊列中所有狀態都已處理完畢。
DFS:基于遞歸的搜索方式,它的特點是由一個狀態拓展一個狀態,然后不停拓展,直到找到目標或者無法繼續拓展結束一個狀態的遞歸。
?????????
優缺點:BFS:對于解決最短或最少問題特別有效,而且尋找深度小,但缺點是內存耗費量大(需要開大量的數組單元用來存儲狀態)。
????????DFS:對于解決遍歷和求所有問題有效,對于問題搜索深度小的時候處理速度迅速,然而在深度很大的情況下效率不高
?
總結:不管是BFS還是DFS,它們雖然好用,但由于時間和空間的局限性,以至于它們只能解決數據量小的問題。
?
各種搜索題目歸類:
?
坐標類型搜索 :這種類型的搜索題目通常來說簡單的比較簡單,復雜的通常在邊界的處理和情況的討論方面會比較復雜,分析這類問題,我們首先要抓住題目的意思,看具體是怎么建立坐標系(特別重要),然后仔細分析到搜索的每一個階段是如何通過條件轉移到下一個階段的。確定每一次遞歸(對于DFS)的回溯和深入條件,對于BFS,要注意每一次入隊的條件同時注意判重。要牢牢把握目標狀態是一個什么狀態,在什么時候結束搜索。還有,DFS過程的參數如何設定,是帶參數還是不帶參數,帶的話各個參數一定要保證能完全的表示一個狀態,不會出現一個狀態對應多個參數,而這一點對于BFS來說就稍簡單些,只需要多設置些變量就可以了。
??????????????經典題目:細胞(NDK1435)、Tyvj:乳草的入侵、武士風度的牛
?
數值類型搜索:(雖然我也不知道該怎么叫,就起這個名字吧),這種類型的搜索就需要仔細分析分析了,一般來說采用DFS,而且它的終止條件一般都是很明顯的,難就難在對于過程的把握,過程的把握類似于坐標類型的搜索(判重、深入、枚舉),注意這種類型的搜索通常還要用到剪枝優化,對于那些明顯不符合要求的特殊狀態我們一定要在之前就去掉它,否則它會像滾雪球一樣越滾越大,浪費我們的時間。
??????????????經典題目:Tyvj:派對;售貨員的難題,以及各種有關題目
總結
以上是生活随笔為你收集整理的DFS与BFS的总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度优先搜索和广度优先搜索的比较与分析
- 下一篇: Red and Black---DFS深