1. 程式人生 > 其它 >關於深搜廣搜的理解

關於深搜廣搜的理解

技術標籤:深搜廣搜專題演算法

在這裡插入圖片描述
假設我們從S開始搜尋,需要搜尋到E.
. 表示可通行
#表示不可通行

什麼是深搜

深搜一般用於整個圖的遍歷,它一般用於求多個解的情況,其過程
簡要來說是對每一個	  可能的分支路徑深入到不能再深入為止,
而且每個節點只能訪問一次
如上圖所示,深搜會得到兩條路徑分別為向右向下和向下向右在向下。因為
需要遍歷得到所有解,深搜往往會比廣搜需要花費更多的時間

什麼是廣搜

廣搜一般是用於求圖的最短路徑,比如迷宮中走到某一點的最短距離,或者
某個字串交換達到目標字串的最少次數,解的個數一般是為單一的,可
以把搜尋的整個過程想象成一棵樹,要求的解就是其中的某一個節點,且距
離根節點是最近的。
如上圖所示,設S的座標為(0,1)
第一步:到達點的座標為(0,2)(1,1)
第二步:到達點的座標為(0,3) (2,1)
第一步還可能搜到的點為(-1,1) (0,0),但是(-1,1)超出了圖的範圍,
(0,0)處結點為#,不可通行,第二步同理。

兩種搜尋的異同


總的來說兩種搜尋方法的時間複雜度和空間複雜度是差不多的,但是在只求最優解的情況下,廣搜因為可以在某一步搜到答案立刻停止(因為搜到的第一個答案必然是最優解),所以耗費的時間往往比深搜要少很多。

任何搜尋過程都要求不能走回頭路(隨著搜尋步數的增多,允許走回頭路的情況下,每一步可走路徑會多到搜不下去),所以都需要儲存搜尋地圖中某點的訪問狀態。
因為搜尋的地圖往往是有邊界的,並且超出邊界會造成不可預知的錯誤,所以兩種搜尋都需要在搜尋中進行邊界狀態判斷。
ps:這兩點也是我作為初學者經常忘記的,所以還是提醒一下大家牢記~