啟發式搜尋的方式(深度優先,廣度優先)和 搜尋方法(Dijkstra‘s演算法,代價一致搜尋,貪心搜尋 ,A星搜尋)
提示:文章寫完後,目錄可以自動生成,如何生成可參考右邊的幫助文件
前言
啟發式搜尋(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
相關文章
- 最佳路徑搜尋(二):啟發式搜尋(代價一致搜尋(Dijkstra search),貪心搜尋,A*搜尋)
- 基本演算法——深度優先搜尋(DFS)和廣度優先搜尋(BFS)演算法
- 圖的廣度優先搜尋和深度優先搜尋Python實現Python
- 圖的遍歷:深度優先搜尋與廣度優先搜尋
- python 二叉樹深度優先搜尋和廣度優先搜尋Python二叉樹
- 深度優先搜尋
- bfs廣度優先搜尋
- ybtoj:廣度優先搜尋
- 深度和廣度優先搜尋演算法演算法
- c++ 廣度優先搜尋(寬搜)C++
- DFS(深度優先搜尋)
- ybtoj:深度優先搜尋
- 【演算法】深度優先搜尋(DFS)演算法
- 演算法筆記(廣度優先搜尋)演算法筆記
- js版本的(廣、深)度優先搜尋JS
- 貪心+搜尋
- 0基礎學演算法 搜尋篇第一講 深度優先搜尋演算法
- 【演算法】廣度/寬度優先搜尋(BFS)演算法
- 演算法競賽——BFS廣度優先搜尋演算法
- leetcode 刷題之深度優先搜尋LeetCode
- 深度優先搜尋演算法(DFS)講解演算法
- 深度優先搜尋演算法-dfs講解演算法
- 【程式碼隨想錄】廣度優先搜尋
- 廣度優先搜尋(BFS)思路及演算法分析演算法
- 0演算法基礎學演算法 搜尋篇第二講 BFS廣度優先搜尋的思想演算法
- LeetCode演算法練習——深度優先搜尋 DFSLeetCode演算法
- 深度優先搜尋(DFS)思路及演算法分析演算法
- A*啟發式搜尋
- 「Golang成長之路」迷宮的廣度優先搜尋Golang
- 演算法(三):圖解廣度優先搜尋演算法演算法圖解
- 【知識點】深度優先搜尋 Depth First Search
- 深度優先搜尋 (Depth First Search 簡稱:DFS)
- POJ1915,雙向寬度優先搜尋
- 從1到n的全排列(深度優先搜尋)
- 海量資料搜尋---搜尋引擎
- golang學習筆記——迷宮的廣度優先搜尋Golang筆記
- 搜尋
- 搜尋引擎-03-搜尋引擎原理