看完以下概述,即可明白何為A星算法。
關(guān)于什么是A星算法,上網(wǎng)一查便知。在此只簡要記錄一些有關(guān)A星算法的要點
一:f、g、h值
f值:即:算法的估價值。是指對某一點的估價值。例如:要想從起點 S 到達(dá)終點 D,則中間可能會經(jīng)過n個點,假如其中經(jīng)過點:X ,則f(X),就是對點x的計算所得的估價值。當(dāng)然,對于估價值,是越小越好。
g值: 即:從起點 S 到達(dá)點 X 實際所花的代價值。例如:以格子數(shù)為計量單位。則g值表示,從S到X所經(jīng)過的格子數(shù),即為實際所花費的代價值
h值: 即:從點 X 到達(dá)終點 D 可能要花費的值。也就是所謂的估計值,猜測值。這個值根據(jù)不同的應(yīng)用,實現(xiàn)策略,將會有不同的結(jié)果。當(dāng)然值越小是越好的。理由是:f(X) = g(X) + h(X) 。因為g(X)值是固定的,已知的。所以要想f(X)值越小,則只能h(X)的值越小。
二:節(jié)點與地圖位置點
地圖位置點不言而喻,是指地圖上的某個具體點,因此,只要地圖的劃分方法確定,則地圖位置點必然確定。
節(jié)點是A星算法中所需要依賴的數(shù)據(jù)信息存儲相關(guān)的點。與地圖位置點不同。節(jié)點中所存儲的數(shù)據(jù)信息是靈活多變的。同時,同一個節(jié)點,可能對應(yīng)于不同的地圖位置點。一般情況下,節(jié)點中會存儲地圖位置點信息、當(dāng)前節(jié)點的f、g、h值等等。
!!!note: 在A星算法中,節(jié)點只分為兩類。一類是:待考察的節(jié)點。一類是:已考察的節(jié)點。
已考察節(jié)點是指:當(dāng)所有與節(jié)點X相關(guān)連的節(jié)點的f、g、h值均已被賦值并且這些節(jié)點均已被添加到open表中時,則節(jié)點X就是已經(jīng)被考察過了。
三:open表與closed表
open表中所存儲的元素,全部都是需要進(jìn)一步進(jìn)行考察的節(jié)點。
closed表中所存儲的元素,全部都是已經(jīng)被考察過了的節(jié)點。
四:A星算法的實現(xiàn)步驟
1) 令 P = 起始節(jié)點
2) 把 f, g, h 值賦給 P
3) 將 P 添加到 Open 表中。此時 P 是 Open 表中唯一的節(jié)點。
4) 令 B = Open 表中的最佳節(jié)點。(提示:所謂最佳節(jié)點是指:該節(jié)點的 f 值最小)
(1) 如果 B 是目標(biāo)節(jié)點,則退出。此時已找到一條路徑。
(2) 如果 Open 表為空,則退出。此時沒有找到路徑。
5) 令 C 等于一個與 B 相連的有效節(jié)點。
(1) 把 f, g, h 的值賦給 C。
(2) 檢查 C 是在 Open 表里,還是在Closed表里。
2.1: 若在 Closed 表里,則檢查新路徑是否比原先更好,若是則采用新路徑。
2.2: 否則把 C 添加到 Open 表里.
(3) 對所有 B 的子孫節(jié)點重復(fù)步驟 5).
6) 重復(fù)步驟 4).
關(guān)于什么是A星算法,上網(wǎng)一查便知。在此只簡要記錄一些有關(guān)A星算法的要點
一:f、g、h值
f值:即:算法的估價值。是指對某一點的估價值。例如:要想從起點 S 到達(dá)終點 D,則中間可能會經(jīng)過n個點,假如其中經(jīng)過點:X ,則f(X),就是對點x的計算所得的估價值。當(dāng)然,對于估價值,是越小越好。
g值: 即:從起點 S 到達(dá)點 X 實際所花的代價值。例如:以格子數(shù)為計量單位。則g值表示,從S到X所經(jīng)過的格子數(shù),即為實際所花費的代價值
h值: 即:從點 X 到達(dá)終點 D 可能要花費的值。也就是所謂的估計值,猜測值。這個值根據(jù)不同的應(yīng)用,實現(xiàn)策略,將會有不同的結(jié)果。當(dāng)然值越小是越好的。理由是:f(X) = g(X) + h(X) 。因為g(X)值是固定的,已知的。所以要想f(X)值越小,則只能h(X)的值越小。
二:節(jié)點與地圖位置點
地圖位置點不言而喻,是指地圖上的某個具體點,因此,只要地圖的劃分方法確定,則地圖位置點必然確定。
節(jié)點是A星算法中所需要依賴的數(shù)據(jù)信息存儲相關(guān)的點。與地圖位置點不同。節(jié)點中所存儲的數(shù)據(jù)信息是靈活多變的。同時,同一個節(jié)點,可能對應(yīng)于不同的地圖位置點。一般情況下,節(jié)點中會存儲地圖位置點信息、當(dāng)前節(jié)點的f、g、h值等等。
!!!note: 在A星算法中,節(jié)點只分為兩類。一類是:待考察的節(jié)點。一類是:已考察的節(jié)點。
已考察節(jié)點是指:當(dāng)所有與節(jié)點X相關(guān)連的節(jié)點的f、g、h值均已被賦值并且這些節(jié)點均已被添加到open表中時,則節(jié)點X就是已經(jīng)被考察過了。
三:open表與closed表
open表中所存儲的元素,全部都是需要進(jìn)一步進(jìn)行考察的節(jié)點。
closed表中所存儲的元素,全部都是已經(jīng)被考察過了的節(jié)點。
四:A星算法的實現(xiàn)步驟
1) 令 P = 起始節(jié)點
2) 把 f, g, h 值賦給 P
3) 將 P 添加到 Open 表中。此時 P 是 Open 表中唯一的節(jié)點。
4) 令 B = Open 表中的最佳節(jié)點。(提示:所謂最佳節(jié)點是指:該節(jié)點的 f 值最小)
(1) 如果 B 是目標(biāo)節(jié)點,則退出。此時已找到一條路徑。
(2) 如果 Open 表為空,則退出。此時沒有找到路徑。
5) 令 C 等于一個與 B 相連的有效節(jié)點。
(1) 把 f, g, h 的值賦給 C。
(2) 檢查 C 是在 Open 表里,還是在Closed表里。
2.1: 若在 Closed 表里,則檢查新路徑是否比原先更好,若是則采用新路徑。
2.2: 否則把 C 添加到 Open 表里.
(3) 對所有 B 的子孫節(jié)點重復(fù)步驟 5).
6) 重復(fù)步驟 4).