前置知識
定義1,g(n)=從樹根到節點n的代價。當演算法處理到某個節點時,g(n)是可以精確計算的。
定義2,h*(n)=從節點n到目標節點的優化路徑的代價。一般不可知。
定義3,f*(n)=g(n) + h*(n)是包含節點n的路徑的最小代價。一般不可知。
定義4,h(n)=從節點n到目標節點的優化路徑的估計代價。
定義5,f(n)=g(n) + h(n)是包含節點n的路徑的估計最小代價。
假設,對於任意的節點n而言,已知h*(n),可以構建出乙個演算法直接找到最優解,即處理每一次選擇時,都選擇f*(n)代價最小的節點。但是,對於任意乙個演算法而言,h*(n)不可知,我們只能夠估計h*(n)的值,這也是爬山法和best-frist演算法中評價函式或啟發式函式的作用。
演算法本質
a*演算法保證所估計h*(n)的值h(n)滿足:h(n) ≤ h*(n)。
一旦滿足這個條件,當使用使用best-first策略搜尋時,如果該方法選中的節點是目標節點,那麼該節點表示的解就是當前問題的最優解。
定理1,使用best-first策略搜尋,且滿足h(n) ≤ h*(n),如果演算法選擇的節點是目標節點, 則該節點表示的解是優化解。
證明1:只需要證明,f*(t)是最優解代價即可,n為此時可以進行擴充套件的所有節點,即f*(t)是中的最小值。
演算法拓展
可以將a*演算法的h(n)作兩種極端情況的考慮。
由此,可以明確的是,盡量使得h(n)接近h*(n),越接近,演算法越佳。
例子說明
Bellman Ford 演算法解決最短路徑問題
bellman ford 演算法 一 基本演算法 bellman ford 演算法可以處理路徑權值為負數時的單源最短路徑問題.設想可以從圖中找到乙個環路且這個環路中所有路徑的權值之和為負.那麼通過這個環路,環路中任意兩點的最短路徑就可以無窮小下去.如果不處理這個負環路,程式就會永遠執行下去.bell...
最短路徑演算法 最短路
在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?input 輸入包括多組資料。每組資料第一行是兩個整數n m n 100,m 10000 n...
最短路徑演算法
floyd演算法 012345 001 54 1108 1 2 801 3 3 1035 45 302 5413520 floyd 演算法過程描述如下 首先 以邊集 初始化,得到所有的直接連通代價 依次考慮第 k個結點,對於 中的每乙個 i j 判斷是否滿足 s i j s i k s k j 如果...