廣度優先搜索(BFS)與深度優先搜索(DFS)的對比及優缺點

廣度優先搜索(BFS)與深度優先搜索(DFS)的對比及優缺點

深搜,顧名思義,是深入其中、直取結果的一種搜索方法

如果深搜是一個人,那麼他的性格一定倔得像頭牛!他從一點出發去旅遊,只朝着一個方向走,除非路斷了,他絕不改變方向!除非四個方向全都不通或遇到終點,他絕不後退一步!因此,他的姐姐廣搜總是嘲笑他,說他是個一根筋、不撞南牆不回頭的傢伙。

深搜很討厭他姐姐的嘲笑,但又不想跟自己的親姐姐鬧矛盾,於是他決定給姐姐講述自己旅途中的經歷,來改善姐姐對他的看法。他成功了,而且只講了一次。從那以後他姐姐不僅再沒有嘲笑過他,而且連看他的眼神都充滿了讚賞。他以爲是自己路上的各種英勇征服了姐姐,但他不知道,其實另有原因……

深搜是這樣跟姐姐講的:關於旅行呢,我並不把目的地的風光放在第一位,而是更注重於沿路的風景,所以我不會去追求最短路,而是把所有能通向終點的路都走一遍。可是我並不知道往哪走能到達目的地,於是我只能每到一個地方,就向當地的人請教各個方向的道路情況。

爲了避免重複向別人問同一個方向,我就給自己規定:先問北,如果有路,那就往北走,到達下一個地方的時候就在執行此規定,如果往北不通,我就再問西,其次是南、東,要是這四個方向都不通或者抵達了終點,那我回到上一個地方,繼續探索其他沒去過的方向。我還要求自己要記住那些幫過他的人,但是那些給我幫倒忙的、讓我白費力氣的人,要忘記他們。有了這些規定之後,我就可以大膽的往前走了,既不用擔心到不了不目的地,也不用擔心重複走以前的路。哈哈哈……

深搜優缺點

優點

  • 能找出所有解決方案
  • 優先搜索一棵子樹,然後是另一棵,所以和廣搜對比,有着內存需要相對較少的優點

缺點

  • 要多次遍歷,搜索所有可能路徑,標識做了之後還要取消。
  • 在深度很大的情況下效率不高

使用場景:性格測試的遊戲

參考文章:https://segmentfault.com/a/1190000010563179


廣搜,顧名思義,是多管齊下、廣撒網的一種搜索方法

如果廣搜是一個人,那麼她一定很貪心,而且喜新厭舊!她從一點出發去旅遊,先把與起點相鄰的地方全部遊覽一遍,然後再把與她剛遊覽過的景點相鄰的景點全都遊覽一邊……一直這樣,直至所有的景點都遊覽一遍。

廣搜屬於一種盲目搜尋法,目的是系統地展開並檢查圖中的所有節點,以找尋結果。換句話說,它並不考慮結果的可能位置,徹底地搜索整張圖,直到找到結果爲止。類似樹的按層遍歷,其過程爲:首先訪問初始點Vi,並將其標記爲已訪問過,接着訪問Vi的所有未被訪問過可到達的鄰接點Vi1、Vi2…Vit,並均標記爲已訪問過,然後再按照Vi1、Vi2…Vit 的次序,訪問每一個頂點的所有未被訪問過的鄰接點,並均標記爲已訪問過,依此類推,直到圖中所有和初始點Vi有路徑相通的頂點都被訪問過爲止。

廣搜優缺點

優點

  • 對於解決最短或最少問題特別有效,而且尋找深度小
  • 每個結點只訪問一遍,結點總是以最短路徑被訪問,所以第二次路徑確定不會比第一次短

缺點

  • 內存耗費量大(需要開大量的數組單元用來存儲狀態)

使用場景:計算網絡數據鏈路層的最短跳數,走迷宮的最短路徑

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章