A 演算法的一些總結

2021-07-22 09:27:38 字數 1112 閱讀 6515

看拓撲狀態監控的一篇文章時發現提到了a*演算法,他的目的是提取拓撲中的重要拓撲資訊來進行監控,進而減少控制資訊消耗。覺得這個想法不錯,但具體a*演算法是怎麼樣的呢?於是找了一下資料,覺得下面這篇帶著例項講的不錯,比較直觀,雖說博主也是借他山之石吧,但還是總結歸納的不錯,排版也很清晰,點讚。

理解a*演算法的尋路過程接

上面的內容中a*演算法用來在靜態網路中求最短路徑,而且上面文章中好像用的是遊戲中的例子,演算法的關鍵是估價函式f(n)=g(n)+h(n),其實想一想的話,dijkstra演算法就是乙個h(n)=0的特殊a*演算法啊,所有點分兩個集合,乙個集合中是處理過的點,乙個是待處理的點,不斷的選取處理集合中的鄰居點加入到處理集合中直到目的點被選取。

而且廣度優先搜尋bfs演算法好像也算是這種特殊的a*演算法。

然而a*演算法與dijkstra和貪心演算法具體是什麼關係呢,好的部落格一篇就夠:

關於尋路演算法的一些思考(1):a*演算法介紹

那麼估價函式到底應該如何設計?有思考1就有思考2:

關於尋路演算法的一些思考(2):heuristics 函式

有沒有講**實現的,思考3來了:

關於尋路演算法的一些思考(3):a*演算法的實現

拓展:關於尋路演算法的一些思考(4):a* 演算法的變體

關於尋路演算法的一些思考(5):處理移動中的障礙物

關於尋路演算法的一些思考(6):預先計算好的路徑的所用空間

說實話,思考3中關於處理open和closed集合的各種資料結構優劣的分析很精彩,有興趣可以仔細看看,像伸展樹和hot佇列都沒聽說過,漲了姿勢啊!

再說一下,a*演算法在上述理解a*演算法的尋路過程接遊戲例子中到底是不是最優的,不信你可以請看下邊這個文章,作者起名叫b*演算法,其實只是作者的一廂情願罷了,不具備學術性的流行度。

一種高效的尋路演算法 - b*尋路演算法

注意,a*演算法也不是只用了搜尋最短路,它是狀態空間搜尋的一種最好優先演算法。請看下面雲風大牛的部落格,講的很好,是狀態空間搜尋中啟發式演算法的一種,啟發式演算法是為了避免窮舉這種無「方向性」的搜尋,採取了對搜尋方向的評估策略,a*就是一種最好優先策略。

a* 演算法之誤區

另外,有a*演算法,那麼有a演算法嗎?搜了一下,還真的是公升級啊,大概意思就是樸素的狀態空間搜尋如bfs和dfs就是a演算法,而加了啟發式的評估就是a*演算法。

一些演算法的總結

各種排序演算法 穩定 直二冒歸基 插入排序 直接插入排序 左邊都是排好序的,右邊的依次和左邊的比較,插入到左邊合適的位置。它的基本思想是將乙個記錄插入到已經排好序的有序表中。當待排序陣列是有序時,是最優的情況,只需當前數跟前乙個數比較一下就可以了 最壞的情況是待排序陣列是逆序。歸併排序 二路歸併 將...

對SPEA演算法的一些總結

spea以及spea2也算是和nsgaii 可以說得上並列的有名的多目標問題的優化演算法了。並且nsgaii,spea,以及spea2會經常拿來和自己的演算法來做對比,在寫 的時候。今天特意複習了下spea,下面總結一下這個演算法,主要是描述一下流程,如果到最後還有啥沒說全的就再補充下 1 首先初始...

K D樹演算法的一些總結

在2016年acm icpc青島站的比賽中,一道k d樹問題成為了金銀牌的分界線,最後由我們隊乙個強力隊友寫出了該題,其實那題本來該由我負責的,都怪我學藝不精。k d樹 k dimensional樹的簡稱 是一種分割k維資料空間的資料結構。主要應用於多維空間關鍵資料的搜尋 如 範圍搜尋和最近鄰搜尋 ...