110 likes | 261 Views
廣度優先搜尋. 廣度優先搜尋. 在包含 n 個頂點與 m 個邊的圖形中進行 BFS 所花費的時間為 O ( n + m ) BFS 可以進一步延伸來解決其他的圖形問題 尋找並回報在兩個指定頂點之間包含最少邊數的路徑 找出一個簡單循環,如果有的話. 廣度優先搜尋 (BFS) 是一種一般性的圖形走訪技巧 圖形 G 的 BFS 走訪會 拜訪所有 G 的頂點與邊 判斷 G 是否連通 計算出 G 的連通成員 計算出 G 的生成森林. BFS 演算法. 此種演算法會使用某種設定及取得頂點與邊「標籤」的機制. 例子. 未拜訪頂點
E N D
廣度優先搜尋 廣度優先搜尋
廣度優先搜尋 • 在包含n 個頂點與m 個邊的圖形中進行 BFS 所花費的時間為O(n + m ) • BFS 可以進一步延伸來解決其他的圖形問題 • 尋找並回報在兩個指定頂點之間包含最少邊數的路徑 • 找出一個簡單循環,如果有的話 • 廣度優先搜尋(BFS)是一種一般性的圖形走訪技巧 • 圖形 G 的 BFS 走訪會 • 拜訪所有 G 的頂點與邊 • 判斷 G 是否連通 • 計算出 G 的連通成員 • 計算出 G 的生成森林 廣度優先搜尋
BFS 演算法 • 此種演算法會使用某種設定及取得頂點與邊「標籤」的機制 廣度優先搜尋
例子 未拜訪頂點 已拜訪頂點 未拜訪邊 已拜訪邊 交錯邊 廣度優先搜尋
例子 (續) 廣度優先搜尋
例子 (續) 廣度優先搜尋
性質 標記 Gs:s 的連通成員 性質 1 BFS (G, s) 會拜訪所有Gs 的頂點與邊 性質 2 BFS(G, s) 所標記的已拜訪邊,會構成Gs的生成樹Ts 性質 3 針對Li 中的每個頂點v • 在Ts 中從s 到v 的路徑有i 個邊 • 在Gs中所有從 s 到v 的路徑都至少有i 個邊 廣度優先搜尋
分析 • 設定/取得一個頂點/邊的標籤所花費的時間為O(1) • 每個頂點都會被標記兩次 • 一次是未拜訪 • 一次是已拜訪 • 每個邊都會被標記兩次 • 一次是未拜訪 • 一次是已拜訪或交錯 • 每個頂點都會被插入一次到序列Li 中 • 針對每個頂點,方法 incidentEdges 都會被呼叫一次 • 只要圖形是以鄰接串列結構表示,BFS 便能夠在O(n + m) 時間內執行 • 回想一下 廣度優先搜尋
應用 • 使用樣版方式樣式,我們可以特殊化圖形G 的 BFS 走訪,以在O(n + m) 時間內解決以下問題 • 計算G 的連通成員 • 計算G 的生成森林 • 找出G 中的簡單循環,或回報G 是一個森林 • 指定G 的兩個頂點,找出兩者之間擁有最少邊數的路徑,或回報此種路徑不存在 廣度優先搜尋
DFS vs. BFS 廣度優先搜尋
DFS vs. BFS (續) 交錯邊 (v,w) • 在已拜訪邊的樹中,w 與v 位於相同層級,或位於v 的下一層級 反向邊 (v,w) • 在已拜訪邊的樹中,w 為v 的祖先 廣度優先搜尋