通俗易懂的路徑搜尋之A star演算法

2021-09-24 05:37:17 字數 1247 閱讀 5188

搜尋技術是一種通用的問題求解技術,可以將待解決的問題轉化為可搜尋的問題空間,然後在該空間中搜尋求解。搜尋技術在人工智慧領域有著非常廣泛的應用.

盲目搜尋
盲目搜尋是最簡單的搜尋方法,如寬度優先搜尋和深度優先搜尋,這種搜尋方法效率非常低,只適用於非常簡單的問題求解。

騎士旅行問題: 我們在6×6的棋盤上用西洋棋中的騎士遍歷整個棋盤並回到出發點,這個看似並不複雜的問題如果用盲目搜尋求解,可能需要好幾天的時間。

啟發式搜尋
啟發式搜尋: 通過問題的特徵資訊引導搜尋過程,減小搜尋範圍,從而提高搜尋效率。還以上面提到的騎士旅行問題為例,使用啟發式搜尋方法,普通筆記本求解只需要20分鐘,計算效率得到了幾百倍的提公升。

a*(a-star)演算法是一種靜態路網中求解最短路徑最有效的直接搜尋方法,也是解決許多搜尋問題的有效演算法。演算法中的距離估算值與實際值越接近,最終搜尋速度越快。

題目

盲目搜尋的思路是遍歷每一種可能的路徑,顯然絕大部分路徑都是無用的,比如在這個例子中首先往左側移動是肯定無法得到最短路徑的。

a*演算法的思路是在所有可能的下一步子結點中進行試探性的搜尋,尋找最佳結點。

判斷最佳結點的公式:

f = g + h

g表示起點到子結點的代價。

h表示子結點到終點的預估代價。

注意這裡h是預估代價,我們可以使用曼哈頓距離來計算:

上圖計算了起點的所有子節點的f值(左上角)、g值(左下角)、h值(右下角).

顯然右側的子結點f值最小,我們把它作為最佳結點a.

繼續下一步的搜尋。對於當前節點來說,共有4個可能的子結點,右側藍色障礙物無法移動,左側綠色結點為起點,不必走回頭路。經過計算,上方(或下方)的結點的f值最小,可以當作最佳結點b.

此時我們發現:由結點a到結點b的f值要大於從起點到結點b的f值,我們需要重新選擇從起點移動到結點b作為第一步,a*演算法就是通過這種原理實現路徑的不斷優化。

通俗易懂之Ajax

在網頁載入的時候,載入的都是靜態的資源,你寫的每一句話,每乙個結構都是固定的,比如在哪個區域顯示哪張,頁面渲染之後都無法在改變,想要改變就只有改 然後在重新整理頁面。而ajax可以讓我們在 執行的時候,去請求其他地方的資源或者介面,然後把請求來的資料,根據我們寫好的方法渲染到頁面上,多次進行ajax...

通俗易懂之Ajax 二

我們常用的請求方式有get請求和post請求,其中get請求一般是用來獲取資料的,post請求一般是上傳資料的。function get url,callback 上面的if 也可以簡寫成邏輯運算子的短路操作 callback callback xhr.responsetext function p...

通俗易懂的C STL

泛型程式設計 generic programming 是一種語言機制,通過它可以實現乙個標準的容器庫。像類一樣,泛型也是一種抽象資料型別,但是泛型不屬於物件導向,它是物件導向的補充和發展。泛型程式設計在c 上的應用主要體現在兩方面 函式模板和類模板。接下來舉個栗子 csdn部落格 anyway,模板...