算法和數(shù)據(jù)結(jié)構(gòu)4.6 A *算法

A*(A-Star)算法也是一種在圖中求解最短路徑問(wèn)題的算法。

由狄克斯特拉算法發(fā)展而來(lái)稼病,狄克斯特拉算法會(huì)從離起點(diǎn)近的頂點(diǎn)開(kāi)始选侨,按順序求出起點(diǎn)到各個(gè)頂點(diǎn)的最短路徑。

也就是說(shuō)然走,一些離終點(diǎn)較遠(yuǎn)的頂點(diǎn)的最短路徑也會(huì)被計(jì)算出來(lái)援制,但是這部分其實(shí)是無(wú)用的。

與迪克斯特拉算法不同的是芍瑞,A*就會(huì)預(yù)先估算一個(gè)值晨仑,并利用這個(gè)值省去一些無(wú)用的計(jì)算。

A*.jpg

圖示頂點(diǎn)從A-Z拆檬,備注:A2,A3,A4也是頂點(diǎn)洪己,只是字母不夠用了,用數(shù)字區(qū)分竟贯。

設(shè)S為起點(diǎn)码泛,G為終點(diǎn),嘗試用狄克斯特拉算法來(lái)求該圖中最短路徑澄耍。

在圖中每個(gè)方框?qū)儆谝粋€(gè)頂點(diǎn)噪珊,假設(shè)每個(gè)相鄰兩個(gè)頂點(diǎn)的距離(權(quán)重)都為1晌缘。

以這個(gè)設(shè)定為前提,用狄克斯特拉算法來(lái)求最短路徑:

用狄克斯特拉算法求最短路徑的結(jié)果如下圖所示:

dks.jpg

從M搜索到A的最小權(quán)重路徑權(quán)重是8痢站,最短路徑的頂點(diǎn)順序是:
M - L - K - J - H - Z - C - B - A

狄克斯特拉算法只根據(jù)起點(diǎn)到候補(bǔ)頂點(diǎn)的距離來(lái)決定下一個(gè)頂點(diǎn)磷箕。因此無(wú)法發(fā)現(xiàn)M-N -O 方向和H - I - G方向的兩條路徑離終點(diǎn)越來(lái)越遠(yuǎn),同樣會(huì)繼續(xù)搜索阵难。

而A*算法不僅會(huì)考慮從起點(diǎn)到候補(bǔ)頂點(diǎn)的距離岳枷,還會(huì)考慮從點(diǎn)錢(qián)所在頂點(diǎn)到終點(diǎn)的估算距離。這個(gè)估算距離可以自由設(shè)定呜叫。這里用頂點(diǎn)到終點(diǎn)的直線(xiàn)距離四設(shè)五入后的值空繁。

接下來(lái)就用A*算法來(lái)求解:

現(xiàn)將起點(diǎn)M設(shè)置為已經(jīng)搜索過(guò)的狀態(tài),分別計(jì)算起點(diǎn)周?chē)總€(gè)頂點(diǎn)的權(quán)重朱庆。

\color{red}{注意這里的權(quán)重計(jì)算方法:}

頂點(diǎn)N到終點(diǎn)的估算距離 = √(16 + 25)= 6.4 四舍五入 = 6
頂點(diǎn)N的權(quán)重 = 從起點(diǎn)M到頂點(diǎn)N的頂點(diǎn)距離 加上 頂點(diǎn)N到終點(diǎn)的距離估算距離 = 1 + 6 = 7

頂點(diǎn)Q到終點(diǎn)的估算距離 = √ (9 + 16)= 5
頂點(diǎn)Q的權(quán)重 = 從起點(diǎn)M到頂點(diǎn)Q的距離 加上頂點(diǎn)Q到終點(diǎn)的估算距離 = 1 + 5 = 6

頂點(diǎn)L到終點(diǎn)的估算距離= √ ( 16 + 9 ) = 5
頂點(diǎn)L的權(quán)重 = 從起點(diǎn)M到頂點(diǎn)L的距離 加上 頂點(diǎn)L到終點(diǎn)的估算距離 = 1 + 5 = 6

接下來(lái)選擇權(quán)重最小的頂點(diǎn)來(lái)繼續(xù)搜索盛泡,選擇Q或者L都可以,這里選擇Q娱颊,

選擇Q來(lái)搜索時(shí)候傲诵,這里會(huì)求解R的權(quán)重

頂點(diǎn)R的權(quán)重 = 從起點(diǎn)M到頂點(diǎn)R的距離 加上 頂點(diǎn)R 到終點(diǎn)的估算距離= 2 + 4 = 6

接下來(lái)可以選擇頂點(diǎn)R或者頂點(diǎn)L繼續(xù)搜索,這里選擇頂點(diǎn)R,

選擇頂點(diǎn)R搜索時(shí)候箱硕,這里會(huì)求解S的權(quán)重拴竹,

頂點(diǎn)S的權(quán)重 = 從起點(diǎn)M到頂點(diǎn)S的距離 加上 頂點(diǎn)S到終點(diǎn)的估算距離 = 3 + 4 = 7

接下來(lái)選擇權(quán)重最小的頂點(diǎn)L來(lái)進(jìn)行搜索,求解K的權(quán)重

頂點(diǎn)K的權(quán)重 = 2 + 4 = 6

接下來(lái)選擇權(quán)重最小的頂點(diǎn)K來(lái)進(jìn)行搜索剧罩,求解J的權(quán)重

頂點(diǎn)J的權(quán)重= 3 + 4 = 7

接下來(lái)可以選的起點(diǎn)是N栓拜,S, J,權(quán)重都為7惠昔,這里隨機(jī)選擇N來(lái)搜索菱属,求解頂點(diǎn)O的權(quán)重

頂點(diǎn)O的權(quán)重 = 2 + 7 = 9

接下來(lái)可選擇的起點(diǎn)是S和J,權(quán)重都為7舰罚,這里隨機(jī)選擇S來(lái)搜索纽门,求解T的權(quán)重

頂點(diǎn)T的權(quán)重 = 4 + 4 = 8

接下來(lái)選擇J來(lái)搜索,求解H的權(quán)重

頂點(diǎn)H的權(quán)重 = 4 + 4 = 8

接下來(lái)可選擇的頂點(diǎn)是T 和 H 营罢,這里隨機(jī)選擇T

...

....

搜索完畢結(jié)果如下圖:

end.jpg

求得最終的M - A的最短路徑權(quán)重為8赏陵,順序?yàn)镸 - L - K - J - H - Z - C - B - A 。

在A*算法中顯然少搜索了兩個(gè)遠(yuǎn)離終點(diǎn)方向的路線(xiàn)M-N-O 和J - H - I饲漾。效率比狄克斯特拉算法高蝙搔。

但是如果這個(gè)頂點(diǎn)到終點(diǎn)的估算距離無(wú)法大概估算,那么就不能用A*算法考传。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吃型,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子僚楞,更是在濱河造成了極大的恐慌勤晚,老刑警劉巖枉层,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異赐写,居然都是意外死亡鸟蜡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)挺邀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)揉忘,“玉大人,你說(shuō)我怎么就攤上這事端铛∑” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵禾蚕,是天一觀的道長(zhǎng)您朽。 經(jīng)常有香客問(wèn)我,道長(zhǎng)夕膀,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任美侦,我火速辦了婚禮产舞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘菠剩。我一直安慰自己易猫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布具壮。 她就那樣靜靜地躺著准颓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪棺妓。 梳的紋絲不亂的頭發(fā)上攘已,一...
    開(kāi)封第一講書(shū)人閱讀 49,950評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音怜跑,去河邊找鬼样勃。 笑死,一個(gè)胖子當(dāng)著我的面吹牛性芬,可吹牛的內(nèi)容都是我干的峡眶。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼植锉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼辫樱!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起俊庇,我...
    開(kāi)封第一講書(shū)人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤狮暑,失蹤者是張志新(化名)和其女友劉穎鸡挠,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體心例,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡宵凌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了止后。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞎惫。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖译株,靈堂內(nèi)的尸體忽然破棺而出瓜喇,到底是詐尸還是另有隱情,我是刑警寧澤歉糜,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布乘寒,位于F島的核電站,受9級(jí)特大地震影響匪补,放射性物質(zhì)發(fā)生泄漏伞辛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一夯缺、第九天 我趴在偏房一處隱蔽的房頂上張望蚤氏。 院中可真熱鬧,春花似錦踊兜、人聲如沸竿滨。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)于游。三九已至,卻和暖如春垫言,著一層夾襖步出監(jiān)牢的瞬間贰剥,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工筷频, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鸠澈,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓截驮,卻偏偏與公主長(zhǎng)得像笑陈,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子葵袭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • 專(zhuān)業(yè)考題類(lèi)型管理運(yùn)行工作負(fù)責(zé)人一般作業(yè)考題內(nèi)容選項(xiàng)A選項(xiàng)B選項(xiàng)C選項(xiàng)D選項(xiàng)E選項(xiàng)F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚(yú)閱讀 8,981評(píng)論 0 13
  • 1)這本書(shū)為什么值得看: Python語(yǔ)言描述涵妥,如果學(xué)的Python用這本書(shū)學(xué)數(shù)據(jù)結(jié)構(gòu)更合適 2016年出版,內(nèi)容...
    孫懷闊閱讀 12,458評(píng)論 0 15
  • 1坡锡、數(shù)據(jù)結(jié)構(gòu)與算法(Python) 數(shù)據(jù)結(jié)構(gòu)和算法是什么蓬网?答曰:兵法窒所! 1.1算法的概念 算法是計(jì)算機(jī)處理信息的本...
    JerryChenn07閱讀 405評(píng)論 0 0
  • 就在剛剛我媽給我打電話(huà)說(shuō)手機(jī)一個(gè)軟件整不明白,后來(lái)我就給她截了幾個(gè)屏帆锋,一步一步的交給她吵取,但是可能手機(jī)不一樣,我說(shuō)的...
    阿吉同學(xué)閱讀 144評(píng)論 0 0
  • 作者:平寶兒 編號(hào):JS129 很多時(shí)候锯厢,我們覺(jué)得很累皮官,打不起精神去做一些事情,我們覺(jué)得很困实辑,卻在床上睡不著捺氢。 其...
    平寶兒閱讀 141評(píng)論 0 1