深度優先遍歷與廣度優先遍歷

2022-03-27 12:25:57 字數 2059 閱讀 1553

深度優先遍歷

1.深度優先遍歷的遞迴定義

圖的深度優先遍歷類似於樹的前序遍歷。採用的搜尋方法的特點是盡可能先對縱深方向進行搜尋。這種搜尋方法稱為深度優先搜尋(depth-first search)。相應地,用此方法遍歷圖就很自然地稱之為圖的深度優先遍歷

2.基本實現思想:

(1)訪問頂點v;

(2)從v的未被訪問的鄰接點中選取乙個頂點w,從w出發進行深度優先遍歷;

(3)重複上述兩步,直至圖中所有和v有路徑相通的頂點都被訪問到。

3.偽**

遞迴實現

(1)訪問頂點v;visited[v]=1;//演算法執行前visited[n]=0

(2)w=頂點v的第乙個鄰接點;

(3)while(w存在) 

if(w未被訪問)

從頂點w出發遞迴執行該演算法;

w=頂點v的下乙個鄰接點;

非遞迴實現

(1)棧s初始化;visited[n]=0;

(2)訪問頂點v;visited[v]=1;頂點v入棧s

(3)while(棧s非空)

x=棧s的頂元素(不出棧);

if(存在並找到未被訪問的x的鄰接點w)

訪問w;visited[w]=1;

w進棧;

else

x出棧;

廣度優先遍歷

1.廣度優先遍歷定義

圖的廣度優先遍歷bfs演算法是乙個分層搜尋的過程,和樹的層序遍歷演算法類同,它也需要乙個佇列以保持遍歷過的頂點順序,以便按出隊的順序再去訪問這些頂點的鄰接頂點。

2.基本實現思想

(1)頂點v入佇列。

(2)當佇列非空時則繼續執行,否則演算法結束。

(3)出佇列取得隊頭頂點v;訪問頂點v並標記頂點v已被訪問。

(4)查詢頂點v的第乙個鄰接頂點col。

(5)若v的鄰接頂點col未被訪問過的,則col入佇列。

(6)繼續查詢頂點v的另乙個新的鄰接頂點col,轉到步驟(5)。

直到頂點v的所有未被訪問過的鄰接點處理完。轉到步驟(2)。

廣度優先遍歷圖是以頂點v為起始點,由近至遠,依次訪問和v有路徑相通而且路徑長度為1,2,……的頂點。為了使「先被訪問頂點的鄰接點」先於「後被訪問頂點的鄰接點」被訪問,需設定佇列儲存訪問的頂點。

3.偽**

(1)初始化佇列q;visited[n]=0;

(2)訪問頂點v;visited[v]=1;頂點v入佇列q;

(3) while(佇列q非空)  

v=佇列q的對頭元素出隊;

w=頂點v的第乙個鄰接點;

while(w存在)

如果w未訪問,則訪問頂點w;

visited[w]=1;

頂點w入佇列q;

w=頂點v的下乙個鄰接點。

這裡總結下異同。

相同:

1,這兩種方式都是盲目的搜尋,只有在搜尋空間小於計算機記憶體時才具有可行性。

2,兩種方式都有open集合和closed集合,open集合用來儲存將要訪問的節點,closed集合儲存訪問過的節

點。3,兩種方式的平均時間複雜度都是o(b^d).其中b是分支因子,d是搜尋深度。

4,兩種訪問方式都要涉及到在closed集合中查詢節點是否已經訪問過,對closed集合採用不同的資料結構

儲存有不同的效能,線性查詢需要o(n)的時間複雜度,雜湊查詢則需要常數的時間複雜度。

區別:

1,很明顯的搜尋策略不同,乙個是深度,乙個是廣度^-^,這個大家都知道~

2,深度優先搜尋需要使用棧來儲存open集合,新增和刪除操作只需要常數時間,廣度優先搜尋需要使用隊

列來儲存open集合,新增和刪除操作只需要常數時間。

3,深度優先搜尋中棧只需要儲存b*d個狀態節點。廣度優先搜尋則儲存b^d個狀態節點。所以兩種搜尋方式

的儲存規模不同。

4,深度優先搜尋可以找到到目標狀態的多條路徑,廣度優先搜尋則保證找到的是到目標狀態的最短路徑。

注:如果搜尋的是樹,則深度優先搜尋等價先根遍歷,廣度優先搜尋等價層次遍歷。

深度優先遍歷與廣度優先遍歷

深度優先遍歷 1 深度優先遍歷的遞迴定義 圖的深度優先遍歷類似於樹的前序遍歷。採用的搜尋方法的特點是盡可能先對縱深方向進行搜尋。這種搜尋方法稱為深度優先搜尋 depth first search 相應地,用此方法遍歷圖就很自然地稱之為圖的深度優先遍歷 2.基本實現思想 1 訪問頂點v 2 從v的未被...

深度優先遍歷與廣度優先遍歷

深度優先遍歷 1 深度優先遍歷的遞迴定義 圖的深度優先遍歷類似於樹的前序遍歷。採用的搜尋方法的特點是盡可能先對縱深方向進行搜尋。這種搜尋方法稱為深度優先搜尋 depth first search 相應地,用此方法遍歷圖就很自然地稱之為圖的深度優先遍歷 2.基本實現思想 1 訪問頂點v 2 從v的未被...

深度優先遍歷 廣度優先遍歷

用棧進行儲存元素。訪問頂點 頂點入棧,以便記住它 標記頂點,以便不會再訪問它 2 訪問規則 a.如果可能,訪問乙個鄰接的未訪問頂點,標記它,併入棧。b.當不能執行a時 沒有鄰接的未訪問頂點 如果棧不為空,就從棧中彈出乙個頂點。c.如果不能執行規則a和b,就完成了整個搜尋過程。3 實現 基於以上規則,...