簡體   English   中英

啟發式和A *算法

[英]Heuristic and A* algorithm

我正在閱讀有關dijkstra算法和A * star算法。 我知道區別在於所使用的啟發式方法。 但是什么是啟發式算法,以及它如何影響算法? 啟發式只是一種測量距離的方法嗎? 但是dijkstra也考慮距離了嗎? 抱歉,但是我的問題是試探法,它的含義以及為什么要使用它們...(我已經讀過,但不要緊)。其他問題:何時應該使用每一種?

謝謝

在這種情況下,啟發式是一種為算法提供某種形式的額外評估信息的方法,以便算法可以找到“足夠好”的解決方案,而無需詳盡搜索每個可能的解決方案。

Dijkstra的算法不使用啟發式算法。 它從起始節點向外擴展,並檢查圖中的每個節點以找到最短路徑。 盡管這是准確的,但在計算上可能會很昂貴。

相比之下,A *算法使用距離+成本啟發法來指導算法選擇要探索的下一個節點。 這意味着該算法無需檢查圖上的每個節點即可找到可能的搜索解決方案。 因此,它運行起來便宜得多,但會損失整個精度。 之所以起作用,是因為結果通常足夠接近最佳解,並且比窮舉搜索整個圖更便宜。

至於何時應該使用它們,則實際上取決於應用程序。 但是,使用A *算法需要允許的試探法,因此這在算法無法獲得此類信息的情況下可能並不適用。

Dijkstra解決了單源路由問題,即,它為您提供了從單點到空間中任何其他點的成本。

A *解決了單源單目標問題。 它為您提供了從給定點到另一個給定點的最小距離路徑。

A *通常比Dijkstra快,只要您給它一個允許的試探法即可,這是對到目標距離的估計,永遠不會高估所述距離。 與此處給出的先前答案相反,如果允許使用啟發式,則A *是完整的,將為您提供最佳答案。

啟發式方法基本上意味着一個想法或一種直覺! 您用來解決難題的任何策略都是啟發式的! 在某些領域(例如組合問題),它是指可以幫助您在多項式時間內次優地解決NP難題的策略。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM