iT邦幫忙

2021 iThome 鐵人賽

DAY 19
1
Software Development

少女人妻在廚房裡想不通的演算法系列 第 19

【在廚房想30天的演算法】Day 19 演算法 : 圖形搜尋 graph search 廣度搜尋、深度搜尋

  • 分享至 

  • xImage
  •  

Aloha!又是我少女人妻 Uerica!今天真是個秋高氣爽的日子,下午想說跟老公去公園浪漫野餐,還特地開到人煙稀少的公園。結果食物都還沒吃幾口,頭髮就被吹得亂七八糟,盒子還差點飛走,一點都不浪漫啦~


圖形搜尋法 Graph Searching Methods

前面有提到圖型結構是由節點 node 和邊 edge 組成的非線性結構,若沒有封閉迴圈,且每個子節點都只有一個父節點的情況稱為樹,而樹又是圖形結構的一種。

圖與樹的搜尋演算法與一般的陣列搜尋演算法會有些不同,下列就來介紹哪些搜尋演算法適合用在圖形或樹狀的資料結構中。

延伸閱讀:Day 11 資料結構:圖 Graph

常見的圖形搜尋演算法

T5a1qFL

廣度優先搜尋 Breadth-First Search , BFS

廣度優先搜尋,又稱寬度優先搜尋,或橫向優先搜尋。此搜尋方式是用先進先出 (FIFO) 的方式,所以可用佇列的資料結構來存放資料。廣度優先搜尋是從離根節點較近的節點開始搜尋,若沒有會再往下一層搜尋,直到找到搜尋目標或全部搜尋完為止。因為這樣的特性,若搜尋目標離根節點很近,越快被搜尋到。

  • 假設搜尋目標為 5 ,從根節點 1 開始。
    jtHpSO3

  • 往下搜尋所有子節點,這邊先從左邊的子節點 2 開始
    B1oBL3C

  • 再搜尋右邊子節點 3
    opo6qIn

  • 都不是會再往下一層延伸,先從節點 2 的子節點 4 開始
    sMip6R7

  • 若不是再搜尋節點 5 ,比對後找到搜尋目標
    JWUPsxd

深度優先搜尋 Depth-first Search , DFS

深度優先搜尋會先從根節點出發,鎖定某節點後,將其子節點與子孫節點都搜尋完成,才會再延伸至兄弟節點,以此類推。深度優先搜尋是用後進先出 LIFO 的方式,所以可用堆疊的資料結構來存放資料。

  • 從根節點 1 開始搜尋
    4b2HcGE

  • 若不是搜尋目標,往下搜尋子節點 2
    EF4KKEH

  • 若不是搜尋目標,再往下深入搜尋節點 4
    LNeqlaY

  • 若不是搜尋目標,再往下深入搜尋節點 8
    Uz142pq

  • 若不是才退回上層,搜尋節點 5 ,找到搜尋目標
    PzDxGrq

參考資料:

維基百科:廣度優先搜尋

JavaScript 學演算法(十二)- 樹 & 二元樹

深度優先搜尋(DFS)和廣度優先搜尋(BFS)演算法,實用的節點搜尋法


好啦!今天就先到這邊啦~還是在家野餐吹冷氣最浪漫。明天見掰掰~


上一篇
【在廚房想30天的演算法】Day 18 演算法 : 搜尋 search II 指數搜尋、內插搜尋
下一篇
【在廚房想30天的演算法】Day 20 演算法 : 最小生成樹 MST Kruskal、Prim
系列文
少女人妻在廚房裡想不通的演算法30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言