最佳路徑搜尋(二):啟發式搜尋(代價一致搜尋(Dijkstra search),貪心搜尋,A*搜尋)
文章目錄
前言
啟發式搜尋(Heuristically Search)又稱為有資訊搜尋(Informed Search),它是利用問題擁有的啟發資訊來引導搜尋,達到減少搜尋範圍、降低問題複雜度的目的,這種利用啟發資訊的搜尋過程稱為啟發式搜尋。簡單來說,就是已知起點和終點位置,尋找最佳路徑。
一、啟發式搜尋(heuristic search)
方法(Dijkstra search,Greedy Search,A* )
代價一致搜尋 (Uniform Cost Search or Dijkstra search)
貪心搜尋 (Greedy Search)
A星搜尋 (A* 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~~~~~~~~~~
性質(Admissible & Consistent & dominate)
Admissible heuristic
admissibility是啟發式搜尋的一個性質,如果滿足這個性質,那麼,啟發函式一定能得到最佳solution。
A*搜尋能找到最優解的充分條件:
- 搜尋樹上存在著從起始點到目標點的最優路徑
- 問題域是有限的
- 所有結點的子結點的成本>0
- h(n) =< h*(n) (h*(n)為從節點n到目標點的實際成本)
1 2 3易滿足,第4條中這樣的啟發函式被稱為Admissible heuristic,也就是說在A*中我們對目標的估計必須小於或等於其實際值,不然可能會出現找不到最優路徑或者根本找不到路徑的情況
Consistent heuristic
N是開始節點,綠色的是目標節點,h(N)則是從N到目標節點的啟發函式,N’為任意不同於N的節點
A star with tree能找到最優解的充分條件:
- 搜尋樹上存在著從起始點到目標點的最優路徑
- 問題域是有限的
- 所有結點的子結點的成本>0
- h(N’) + c(N, N’) < h(N)
這樣的啟發函式被稱為Consistent heuristic,只有滿足了這個才能保證A*演算法在圖搜尋中能找到最優解。
一個啟發函式是consistent,它也是admissible。反之,不可。
dominate
Dominance(用於表現不同啟發函式的關係)
two admissible heuristics ha, hb:如果對於所有n, ha(n) >hb(n),那麼,我們可以說 ha dominates hb,對於這個search問題,我們最好使用ha作為啟發函式。
總結
A star演算法的特點(考慮g(x)+h(x),注意樹搜尋滿足Admissible heuristic,圖搜尋滿足Consistent heuristic時)
- 完備性:肯定能找到最優解
- 最優性:找到的解花費最小
- 快:擴充套件更少的節點
UCS(代價一致搜尋,只考慮g(x))
- 完備性:肯定能找到最優解
- 最優性:找到的解花費最小
- 比A*慢一些
廣度優先搜尋是代價一致搜尋的特例
貪婪搜尋(啟發式搜尋,但只考慮h(x))
- 不完備性:不保證能找到最優解
深度優先搜尋是貪婪搜尋的特例(令h(n)===0,A*搜尋退化為寬度優先搜尋(BFS),不估計成本,肯定能找到最優解)
相關文章
- 啟發式搜尋的方式(深度優先,廣度優先)和 搜尋方法(Dijkstra‘s演算法,代價一致搜尋,貪心搜尋 ,A星搜尋)演算法
- 貪心+搜尋
- A*啟發式搜尋
- 海量資料搜尋---搜尋引擎
- tpextbuilder- Search 搜尋UI
- 搜尋
- 搜尋引擎-03-搜尋引擎原理
- 從二分搜尋到二叉搜尋樹
- 搜尋引擎es-分詞與搜尋分詞
- 點選搜尋框清空搜尋提示文字
- HTML input search搜尋域HTML
- 直播開發app,實時搜尋、搜尋引擎框APP
- 直播系統程式碼,常用搜尋中搜尋歷史,搜尋推薦功能
- 搜尋策略
- vim搜尋
- 搜尋功能
- 搜尋技巧
- Python之 常用查詢演算法:最小項搜尋、順序搜尋、二分搜尋Python演算法
- 20240713總結(搜尋專題,但是不想搜尋)
- Elasticsearch(ES)的高階搜尋(DSL搜尋)(上篇)Elasticsearch
- Elasticsearch(ES)的高階搜尋(DSL搜尋)(下篇)Elasticsearch
- 搜尋的未來是精品搜尋 | a16z
- 谷歌搜尋用上BERT,10%搜尋結果將改善谷歌
- 二分搜尋樹(Binary Search Tree)
- 直播平臺開發,基礎搜尋方式之拼音搜尋
- Leetcode 700. 二叉搜尋樹中的搜尋(DAY 2)LeetCode
- 搜尋插入位置
- 搜尋/查詢
- Google搜尋技巧Go
- Elasticsearch 向量搜尋Elasticsearch
- Elasticsearch常用搜尋Elasticsearch
- elasticsearch搜尋商品Elasticsearch
- 單詞搜尋
- Elasticsearch——全文搜尋Elasticsearch
- Nebula 基於 ElasticSearch 的全文搜尋引擎的文字搜尋Elasticsearch
- Mac上神奇的內建搜尋引擎——Spotlight(聚焦搜尋)Mac
- 二叉搜尋樹
- elasticsearch(五)---分散式搜尋Elasticsearch分散式