廣度優先搜索

1.簡介

廣度優先算法(Breadth-First-Search),又稱作寬度優先搜索,或橫向優先搜索,簡稱BFS,是一種圖形搜索演算法。簡單的說,BFS是從根節點開始,沿着樹的寬度遍歷樹的節點,如果發現目標,則演算終止。廣度優先搜索的實現一般採用open-closed表。

2.算法 

對於一個有向圖進行BFS,找出從一個給定的起始節點開始,能夠到達的所有頂點。
(1) 訪問起始節點。
(2) 初始化一個隊列,僅包含起始節點。
(3) 當這個隊列非空時,做以下操作:
1.從隊列中刪除一個頂點v;
2.對於所有臨接於v的頂點w,做以下操作:

3.特性

空間複雜度

因爲所有節點都必須被儲存,因此BFS的空間複雜度爲 O(|V| + |E|),其中 |V| 是節點的數目,而 |E| 是圖中邊的數目。注:另一種說法稱BFS的空間複雜度爲O(B),其中 B 是最大分支系數,而 M 是樹的最長路徑長度。由於對空間的大量需求,因此BFS並不適合解非常大的問題。

時間複雜度

最差情形下,BFS必須尋找所有到可能節點的所有路徑,因此其時間複雜度爲 O(|V| + |E|),其中 |V| 是節點的數目,而 |E| 是圖中邊的數目。

完全性

廣度優先搜索算法具有完全性。這意指無論圖形的種類如何,只要目標存在,則BFS一定會找到。然而,若目標不存在,且圖爲無限大,則BFS將不收斂(不會結束)。

最佳解

若所有邊的長度相等,廣度優先搜索算法是最佳解——亦即它找到的第一個解,距離根節點的邊數目一定最少(如礦工冒險記題目);但對一般的圖來說,BFS並不一定回傳最佳解。這是因爲當圖形爲加權圖(亦即各邊長度不同)時,BFS仍然回傳從根節點開始,經過邊數目最少的解;而這個解距離根節點的距離不一定最短。這個問題可以使用考慮各邊權值,BFS的改良算法成本一致搜尋法(en:uniform-cost search)來解決。然而,若非加權圖形,則所有邊的長度相等,BFS就能找到最近的最佳解。

參考百度百科:http://baike.baidu.com/view/2473538.htm?fr=aladdin


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