A 搜尋演算法

2021-07-09 18:32:01 字數 1006 閱讀 8295

啟發式搜尋演算法:

要理解 a*搜尋演算法,還得從啟發式搜尋演算法開始談起。

所謂啟發式搜尋,就在於當前搜尋結點往下選擇下一步結點時,可以通過乙個啟發函式

來進行選擇,選擇代價最少的結點作為下一步搜尋結點而跳轉其上(遇到有乙個以上代價最

少的結點,不妨選距離當前搜尋點最近一次展開的搜尋點進行下一步搜尋)。

dfs 和 bfs 在展開子結點時均屬於盲目型搜尋,也就是說,它不會選擇哪個結點在下

一次搜尋中更優而去跳轉到該結點進行下一步的搜尋。在運氣不好的情形中,均需要試探完

整個解集空間, 顯然,只能適用於問題規模不大的搜尋問題中。

而與 dfs,bfs 不同的是,乙個經過仔細設計的啟發函式,往往在很快的時間內就可得

到乙個搜尋問題的最優解,對於 np 問題,亦可在多項式時間內得到乙個較優解。是的,關

鍵就是如何設計這個啟發函式。

a*搜尋演算法

a*搜尋演算法,俗稱 a 星演算法,作為啟發式搜尋演算法中的一種,這是一種在圖形平面上,有多個節點的路徑,求出最低通過成本的演算法。常用於遊戲中的 npc 的移動計算,或線上遊戲的 bot 的移動計算上。該演算法像 dijkstra 演算法一樣,可以找到一條最短路徑;也像 bfs一樣,進行啟發式的搜尋。

a*演算法最為核心的部分,就在於它的乙個估值函式的設計上:

f(n)=g(n)+h(n)

其中 f(n)是每個可能試探點的估值,它有兩部分組成:

一部分,為 g(n),它表示從起始搜尋點到當前點的代價(通常用某結點在搜尋樹中的深度來表示)。另一部分,即 h(n),它表示啟發式搜尋中最為重要的一部分,即當前結點到目標結點的估值, h(n)設計的好壞,直接影響著具有此種啟發式函式的啟發式演算法的是否能稱為 a*演算法。

一種具有 f(n)=g(n)+h(n)策略的啟發式演算法能成為 a*演算法的充分條件是:

1、搜尋樹上存在著從起始點到終了點的最優路徑。

2、問題域是有限的。

3、所有結點的子結點的搜尋代價值》0。

4、 h(n)=

A 搜尋演算法

a 演算法是基於bfs的一種入門級啟發式搜尋演算法,就是將bfs的佇列改為基於估價的優先佇列,可以快速地找到答案。優先隊列為小根堆 while 優先佇列不為空 取出隊頭並擴充套件 將擴充套件節點以估價值 當前值為優先順序入隊 endwhile估價函式越接近真實值演算法越優,但一定不能大於真實值,否則...

搜尋演算法小結

搜尋演算法是利用計算機的高效能來有目的的窮舉乙個問題的部分和所有的可能情況,從而求出問題的解的一種方法。常用的搜尋演算法有 一.回溯法 回溯演算法是所有搜尋演算法中最為基本的一種演算法,其採用了一種 走不通就掉頭 思想作為其控制結構,其相當於採用了先根遍歷的方法來構造解答樹,可用於找解或所有解以及最...

爬山搜尋演算法

1.爬山法 hill climbing 爬山法是向值增加的方向持續移動到簡單迴圈過程,演算法在到達乙個 峰頂 時終止,此時相鄰狀態中沒有比該 峰頂 更高的值。爬山法不維護搜尋樹,當前節點只需要記錄當前狀態及其目標函式值 爬山法不會前瞻與當前狀態不直接相鄰的狀態的值 就像健忘的人在大霧中試圖登頂珠峰一...