2013-04-24 38 views
1

我讀到過,當將A *應用於問題時,如果啓發式是一致的,那麼您可以進一步優化A *搜索。 Boost圖庫提供了兩種版本的A *算法:astar_searchastar_search_tree。關於兩者之間的區別,文件不是很清楚;它們中的一個是否執行假設一致啓發式的優化搜索?Boost Graph Library A *提供一致啓發式

回答

3

我通過諮詢Boost郵件列表得到了我正在尋找的答案。我將在這裏爲後代重現答案:

區別在於是否應該努力避免 多次訪問同一個頂點。對於經常通過多條路徑到達頂點的圖,您應該首選astar_search以避免重新訪問該頂點及其後繼者的額外工作。如果是 不太可能相同的頂點出現在多條路徑上,或者檢查頂點價格不夠便宜,以至於不值得避免重複的 工作,則使用astar_search_tree,它不記得它先前訪問過哪個頂點 。試圖找到重複頂點 的缺點是它需要越來越多的內存來存儲查找表 的頂點已經被查看過,並且花費時間搜索並更新此表。該算法的兩個版本都需要允許 啓發式才能正常工作。

Link to the thread

0

_tree和非_tree提升圖形算法版本之間的不同之處在於_tree版本假設你的曲線真的是一棵樹,所以它沒有循環,只有一個箭頭節點。

+0

我不認爲這是真的。我有一個循環的無向圖,astar_search_tree仍然工作得很好。 – giogadi 2013-04-24 20:16:22

+0

玩火! 「如果一個虛擬值被用於距離圖並且該圖包含循環,則該算法可能會進入無限循環」(http://www.boost.org/doc/libs/1_53_0/libs/graph/doc/astar_search的.html)。如果你的圖形不是*你不應該使用_tree版本。 – Roberto 2013-04-24 20:19:19

+0

@giogadi:這並不意味着它將適用於所有非樹形圖。 http://codinghorror.typepad.com/.a/6a0120a85dcdae970b0128776ff992970c-pi – 2013-04-24 20:19:34