日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

‘聪明的搜索算法’ A*算法

發布時間:2025/3/21 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ‘聪明的搜索算法’ A*算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

A*算法

????是一種啟發式的搜索算法。

??? 了解BFS、DFS或者Dijkstra算法的人應該知道。這些算法都是一種向四周盲目式搜索的方法。

?

啟發式搜索:

??? 啟發式搜索就是在狀態空間中的搜索對每一個搜索的位置進行評估,得到最好的位置,再從這個位置進行搜索直到目標。這樣可以省略大量無畏的搜索路徑,提到了效率。在啟發式搜索中,對位置的估價是十分重要的。不同的估價可以有不同的效果。因此,A*算法的關鍵就在于如何建立這個啟發函數。

???公式表示為:f(n)=g(n)+h(n),

  f(n)?是從初始點經由節點n到目標點的估價函數,

  ?g(n)?是在狀態空間中從初始節點到n節點的實際代價,

  ?h(n)?是從n到目標節點最佳路徑的估計代價。

?

A* 算法與廣度、深度優先和 Dijkstra 算法的聯系:

???1、g(n) = 0 時:該算法類似于DFS。

??? 2、h(n) = 0 時:該算法類似于BFS。

??? 3、如果h(0) = 0,只需求出g(n)(即起點到任意點n的最短路徑)時,則轉化成單源最短路徑問題。

?

A*算法淺析:

A*算法與其他搜索路徑的算法的最大區別在于其估計函數的設計,也就是公式f(n)=g(n)+h(n)中h(n)的設計

一般計算h(n)的方法有下面幾種:

1、曼哈頓距離:?|x1-x2| + |y1-y2|。

2、歐式距離:??兩點之間的直線距離。

3、切比雪夫距離:max(|x2-x1|,|y2-y1|)。

?這幅圖中綠色的線代表歐式距離,其他均為曼哈頓距離

該圖中,F6E2切比雪夫距離為:4

?

接下來的分析中,我們的h(n)為曼哈頓距離,g(n)為歐式路徑

假設我們需要搜索的情況如下:

綠色為起始點,紅色為目標,藍色為障礙物,黑色為可通行路徑。

?

F的值是G和H的和。第一步搜索的結果可以在下面的圖表中看到。F,G和H的評分被寫在每個方格里。正如在緊挨起始格右側的方格所表示的,F被打印在左上角,G在左下角,H則在右下角

?

?

接下來我們來講講A*算法的流程:

1,把起始格添加到開啟列表。

2,重復如下的工作:

????? a) 尋找開啟列表中F值最低(最佳估值)的格子,把它切換到關閉列表。

????? b)?對相鄰的格中的每一個格子進行判斷

????????? * 如果它不可通過或者已經在關閉列表中,略過它。反之如下。

????????? * 如果它不在開啟列表中,把它添加進去。把當前格作為這一格的父節點。記錄這一格的F,G,和H值。

????????? * 如果它已經在開啟列表中,用G值為參考檢查新的路徑是否更好。更低的G值意味著更好的路徑。如果是這樣,就把這一格的父節點改成當前格,并且重新計算這一格的G和F值。如果你保持你的開啟列表按F值排序,改變之后你可能需要重新對開啟列表排序。

????? c)?停止,當你

????????? * 把目標格添加進了關閉列表(注解),這時候路徑被找到,或者

????????? * 沒有找到目標格,開啟列表已經空了。這時候,路徑不存在。

3.保存路徑。從目標格開始,沿著每一格的父節點移動直到回到起始格。這就是你的路徑。

?

下篇文章,我將使用A*算法解決一個經典的八數碼問題。

from:?http://blog.csdn.net/cyh_24/article/details/8018752

總結

以上是生活随笔為你收集整理的‘聪明的搜索算法’ A*算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。