深度優先與廣度優先的概念


深度優先搜索(DFS)和廣度優先搜索(BFS)

  深度優先搜索和廣度優先搜索,都是圖形搜索算法,它兩相似,又卻不同,在應用上也被用到不同的地方。這里拿一起討論,方便比較。

一、深度優先搜索

        深度優先搜索屬於圖算法的一種,是一個針對圖和樹的遍歷算法,英文縮寫為DFS即Depth First Search。深度優先搜索是圖論中的經典算法,利用深度優先搜索算法可以產生目標圖的相應拓撲排序表,利用拓撲排序表可以方便的解決很多相關的圖論問題,如最大路徑問題等等。一般用堆數據結構來輔助實現DFS算法。其過程簡要來說是對每一個可能的分支路徑深入到不能再深入為止,而且每個節點只能訪問一次。

基本步奏

(1)對於下面的樹而言,DFS方法首先從根節點1開始,其搜索節點順序是1,2,3,4,5,6,7,8(假定左分枝和右分枝中優先選擇左分枝)。

 
 

(2)從stack中訪問棧頂的點;

 
 

(3)找出與此點鄰接的且尚未遍歷的點,進行標記,然后放入stack中,依次進行;

 
 

(4)如果此點沒有尚未遍歷的鄰接點,則將此點從stack中彈出,再按照(3)依次進行;

 
 

 

 

 
 

(5)直到遍歷完整個樹,stack里的元素都將彈出,最后棧為空,DFS遍歷完成。

 
 

 

 
 

二、廣度優先搜索

        廣度優先搜索(也稱寬度優先搜索,縮寫BFS,以下采用廣度來描述)是連通圖的一種遍歷算法這一算法也是很多重要的圖的算法的原型。Dijkstra單源最短路徑算法和Prim最小生成樹算法都采用了和寬度優先搜索類似的思想。其別名又叫BFS,屬於一種盲目搜尋法,目的是系統地展開並檢查圖中的所有節點,以找尋結果。換句話說,它並不考慮結果的可能位置,徹底地搜索整張圖,直到找到結果為止。基本過程,BFS是從根節點開始,沿着樹(圖)的寬度遍歷樹(圖)的節點。如果所有節點均被訪問,則算法中止。一般用隊列數據結構來輔助實現BFS算法。

基本步奏

(1)給出一連通圖,如圖,初始化全是白色(未訪問);

 
 

(2)搜索起點V1(灰色);

 
 

(3)已搜索V1(黑色),即將搜索V2,V3,V4(標灰);

 
 

(4)對V2,V3,V4重復以上操作;

 
 

(5)直到終點V7被染灰,終止;

 
 

(6)最短路徑為V1,V4,V7.

 
 

引用自:https://www.jianshu.com/p/bff70b786bb6 
這個概念華為面試的時候面試官問過。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM