參考:
在最短路徑演算法中
dijkstra演算法:每次貪心選擇當前更新的點中距離最近的進行更新。
貪心演算法:每次選擇離終點評估最近的點進行更新
a*演算法:綜合了dijkstra和貪心,相當於即考慮了起點到此點的距離,又評估了此點到終點的距離。
a*演算法通過下面這個函式來計算每個節點的優先順序。
其中:
a*演算法在運算過程中,每次從優先佇列中選取f(n)值最小(優先順序最高)的節點作為下乙個待遍歷的節點。
上面已經提到,啟發函式會影響a*演算法的行為。
由上面這些資訊我們可以知道,通過調節啟發函式我們可以控制演算法的速度和精確度。因為在一些情況,我們可能未必需要最短路徑,而是希望能夠盡快找到乙個路徑即可。這也是a*演算法比較靈活的地方。
對於網格形式的圖,有以下這些啟發函式可以使用:
如果圖形中只允許朝上下左右四個方向移動,則可以使用曼哈頓距離(manhattan distance)。
如果圖形中允許朝八個方向移動,則可以使用對角距離。
如果圖形中允許朝任何方向移動,則可以使用歐幾里得距離(euclidean distance)。
容易發現,對於網格圖,h(n)始終小於等於n到終點的代價,故在此a*演算法保證一定能夠找到最短路徑,且比dijkstra優(dijkstra在網格圖中等價於bfs演算法)
A 演算法介紹
不得不嘆服,強大演算法背後,都是簡單得不能再簡單的邏輯。普林斯頓的演算法課程作業裡,要讓用a 演算法。什麼都沒接觸到過,看到後有種想哭的感覺!於是網上查閱資料,漸漸的明白了怎麼回事。通過對a 演算法的學習的個人感悟 計算乙個代價函式,評估每一步的代價,並找到代價最小的方向。最終得到的解可能不是最優,...
雜湊演算法 介紹
1 概念 在資訊保安技術中,經常需要驗證訊息的完整性,雜湊 hash 函式提供了這一服務,它對不同長度的輸入訊息,產生固定長度的輸出。這個固定長度的輸出稱為原輸入訊息的 雜湊 或 訊息摘要 message digest 乙個安全的雜湊函式h必須具有以下屬性 l h能夠應用到大小不一的資料上。2 h能...
ECC演算法介紹
ecc elliptic curves cryptography 加密演算法是一種公鑰加密演算法,與主流的rsa演算法相比,ecc演算法可以使用較短的金鑰達到相同的安全程度。近年來,人們對ecc的認識已經不再處於研究階段,開始逐步進入實際應用,如國家密碼管理局頒布的sm2演算法就是基於ecc演算法的...