深度優先與廣度優先搜尋演算法

2021-10-25 22:22:28 字數 1029 閱讀 9803

1. 深度優先搜尋演算法

depth first search.其過程簡要來說是對每乙個可能的分支路徑深入到不能再深入為止,而且每個節點只能訪問一次.

深度優先遍歷圖的方法是,從圖中某頂點v出發:

(1)訪問頂點v;

(2)依次從v的未被訪問的鄰接點出發,對圖進行深度優先遍歷;直至圖中和v有路徑相通的頂點都被訪問;

(3)若此時圖中尚有頂點未被訪問,則從乙個未被訪問的頂點出發,重新進行深度優先遍歷,直到圖中所有頂點均被訪問過為止。

2. 廣度優先搜尋演算法

breadth first search。在搜尋時,如果遇到乙個結點既有子結點,又有兄弟結點,那麼先找兄弟結點,然後找子結點。是一種盲目搜尋法,目的是系統地展開並檢查圖中的所有節點,以找尋結果。換句話說,它並不考慮結果的可能位置,徹底地搜尋整張圖,直到找到結果為止。廣度優先搜尋讓你能夠找出兩樣東西之間的最短距離,不過最短距離的含義有很多。

3. 實現方法

深度優先搜尋用棧(stack)來實現,整個過程可以想象成乙個倒立的樹形:

1、把根節點壓入棧中。

2、每次從棧中彈出乙個元素,搜尋所有在它下一級的元素,把這些元素壓入棧中。並把這個元素記為它下一級元素的前驅。

3、找到所要找的元素時結束程式。

4、如果遍歷整個樹還沒有找到,結束程式。

廣度優先搜尋使用佇列(queue)來實現,整個過程也可以看做乙個倒立的樹形:

1、把根節點放到佇列的末尾。

2、每次從佇列的頭部取出乙個元素,檢視這個元素所有的下一級元素,把它們放到佇列的末尾。並把這個元素記為它下一級元素的前驅。

3、找到所要找的元素時結束程式。

4、如果遍歷整個樹還沒有找到,結束程式。

4. 比較

廣優的話,佔記憶體多,能找到最優解,必須遍歷所有分枝. 廣優的乙個應用就是迪科斯徹單元最短路徑演算法.

深優的話,佔記憶體少,能找到最優解(一定條件下),但能很快找到接近解(優點),可能不必遍歷所有分枝(也就是速度快), 深優的乙個應用就是連連看遊戲.

深度和廣度優先搜尋演算法

在社交網路中,有乙個六度分割理論,具體是說,世界上任何互不相識的兩人,平均只需要六步就能夠建立起聯絡。乙個使用者的一度連線使用者就是他的好友,二度連線使用者就是他好友的好友,三度連線使用者就是他好友好友的好友。給定乙個使用者,如何找出這個使用者的所有三度 包括一度 二度和三度 好友關係呢?我們知道,...

廣度優先搜尋演算法

廣度優先搜尋 bfs 這個是第乙個研究的課題,廣度優先搜尋也叫寬度優先搜尋,英文為breadth first searth,開始看的時候一頭霧水,基本也能懂大致意思,但是還不是真正的理解,今天又仔細看看,大致理解上又更深了一層吧。下面來總結下,自己的一些體會,以及對它的獨到的理解。大的方面來說它是一...

廣度優先搜尋演算法

在深度優先搜尋中,深度越大的結點越先得到擴充套件。如果把它改為深度越小的結點越先得到擴充套件,就是廣度優先搜尋法。廣度優先搜尋演算法的基本思想 1 建立乙個空的狀態佇列ss 2 建立乙個空的狀態庫sb 3 把初始狀態s 0 存入佇列ss中 4 若佇列狀態是目標狀態,則搜尋成功,演算法執行中止。如該狀...