深度優化&廣度優先 演算法
阿新 • • 發佈:2019-01-02
DFS(深度優化演算法)
深度優先搜尋演算法(Depth-First-Search),是搜尋演算法的一種。它沿著樹的深度遍歷樹的節點,儘可能深的搜尋樹的分 支。當節點v的所有邊都己被探尋過,搜尋將回溯到發現節點v的那條邊的起始節點。這一過程一直進行到已發現從源節點可達的所有節點為止。如果還存在未被髮 現的節點,則選擇其中一個作為源節點並重復以上過程,整個程序反覆進行直到所有節點都被訪問為止。DFS屬於盲目搜尋。
深度優先搜尋是圖論中的經典演算法,利用深度優先搜尋演算法可以產生目標圖的相應拓撲排序表,利用拓撲排序表可以方便的解決很多相關的圖論問題,如最大路徑問題等等。一般用堆資料結構來輔助實現DFS演算法。
演算法步驟:
1、訪問頂點v; 2、依次從v的未被訪問的鄰接點出發,對圖進行深度優先遍歷;直至圖中和v有路徑相通的頂點都被訪問; 3、若此時圖中尚有頂點未被訪問,則從一個未被訪問的頂點出發,重新進行深度優先遍歷,直到圖中所有頂點均被訪問過為止。 上述描述可能比較抽象,舉個例項: DFS 在訪問圖中某一起始頂點 v 後,由 v 出發,訪問它的任一鄰接頂點 w1;再從 w1 出發,訪問與 w1鄰 接但還沒有訪問過的頂點 w2;然後再從 w2 出發,進行類似的訪問,… 如此進行下去,直至到達所有的鄰接頂點都被訪問過的頂點 u 為止。接著,退回一步,退到前一次剛訪問過的頂點,看是否還有其它沒有被訪問的鄰接頂點。如果有,則訪問此頂點,之後再從此頂點出發,進行與前述類似的訪問;如果沒有,就再退回一步進行搜尋。重複上述過程,直到連通圖中所有頂點都被訪問過為止。
BFS(廣度優化搜尋)
廣度優先搜尋演算法(Breadth-First-Search),是一種圖形搜尋演算法。簡單的說,BFS是從根節點開始,沿著樹(圖)的寬度遍歷樹(圖)的節點。如果所有節點均被訪問,則演算法中止。BFS同樣屬於盲目搜尋。一般用佇列資料結構來輔助實現BFS演算法。
演算法步驟: 1、首先將根節點放入佇列中。 2、從佇列中取出第一個節點,並檢驗它是否為目標。 如果找到目標,則結束搜尋並回傳結果。 否則將它所有尚未檢驗過的直接子節點加入佇列中。 3、若佇列為空,表示整張圖都檢查過了——亦即圖中沒有欲搜尋的目標。結束搜尋並回傳“找不到目標”。 4、重複步驟2。