啟發式搜尋的方式(深度優先,廣度優先)和 搜尋方法(Dijkstra‘s演算法,代價一致搜尋,貪心搜尋 ,A星搜尋)

Arwin & Luisa發表於2021-01-02

提示:文章寫完後,目錄可以自動生成,如何生成可參考右邊的幫助文件


前言

啟發式搜尋(Heuristically Search)又稱為有資訊搜尋(Informed Search),它是利用問題擁有的啟發資訊來引導搜尋,達到減少搜尋範圍、降低問題複雜度的目的,這種利用啟發資訊的搜尋過程稱為啟發式搜尋。啟發式搜尋(Heuristically Search)又稱為有資訊搜尋(Informed Search),它是利用問題擁有的啟發資訊來引導搜尋,達到減少搜尋範圍、降低問題複雜度的目的,這種利用啟發資訊的搜尋過程稱為啟發式搜尋。

搜尋方式有:深度優先,廣度優先

搜尋方法有:Dijkstra’s演算法,代價一致搜尋,貪心搜尋 ,A星搜尋


一、深度優先和廣度優先

不同的搜尋演算法根據新增新節點的順序不同而區分,就是擴充步驟候選節點的選擇順序策略
從這種角度考慮時,深度優先搜尋(DFS)和廣度優先搜尋(BFS)其實在處理新節點的方法上是一樣的

區別僅僅在:

       - 深度優先搜尋,在佇列的頭加入新的候選節點
       - 廣度優先搜尋,在佇列的尾加入新的候選節點

二叉樹的深度優先遍歷的非遞迴的通用做法是採用棧,廣度優先遍歷的非遞迴的通用做法是採用佇列。

深度優先遍歷:對每一個可能的分支路徑深入到不能再深入為止,而且每個結點只能訪問一次。要特別注意的是,二叉樹的深度優先遍歷比較特殊,可以細分為先序遍歷、中序遍歷、後序遍歷。具體說明如下:

先序遍歷:對任一子樹,先訪問根,然後遍歷其左子樹,最後遍歷其右子樹。
中序遍歷:對任一子樹,先遍歷其左子樹,然後訪問根,最後遍歷其右子樹。
後序遍歷:對任一子樹,先遍歷其左子樹,然後遍歷其右子樹,最後訪問根。

廣度優先遍歷:又叫層次遍歷,從上往下對每一層依次訪問,在每一層中,從左往右(也可以從右往左)訪問結點,訪問完一層就進入下一層,直到沒有結點可以訪問為止。

在這裡插入圖片描述
先序遍歷:35 20 15 16 29 28 30 40 50 45 55
中序遍歷:15 16 20 28 29 30 35 40 45 50 55
後序遍歷:16 15 28 30 29 20 45 55 50 40 35
廣度優先遍歷:35 20 40 15 29 50 16 28 30 45 55

二、代價一致搜尋,貪心搜尋 ,A星搜尋

最佳優先搜尋 Best First Search 使用評價函式 f(x) 來對上述的節點選擇順序進行排序

下面先定義兩個函式

g(x) 為從根節點到x節點的代價總和

h(x) 為從x節點到目標節點的估計代價總和

這類應用演算法有

代價一致搜尋 (Uniform Cost Search or Dijkstra search) f(x) = g(x)

貪心搜尋 (Greedy Search) f(x) = h(x)

A星搜尋 (A* Search) f(x) = g(x) + h(x)

更具體的解釋和例子見總結中的連結。

總結

這個網址對演算法進行了視覺化表示,非常有助於理解,強烈推薦!!!!!link

相關文章