我想用三種不同的啓發式函數來解決使用A *算法的N-puzzle問題。我想知道如何比較每種啓發式的時間複雜性。我使用的啓發式是:曼哈頓距離,曼哈頓距離+線性衝突,N-max交換。特別是對於8個難題和15個難題。A *啓發式法求解N-puzzle的比較
0
A
回答
1
一般來說,NP難以找到最短的解決方案,所以無論使用哪種啓發式方法,都不太可能找到它們之間複雜度的差異,因爲您不會證明任何界限的緊密性。
如果您將自己限制在8個難題或15個難題,那麼具有任何容許啓發式的A *算法將在O(1)時間內運行,因爲存在有限(儘管數量很多)的棋盤位置。
1
正如@Harold在他的評論中所說的,比較啓發函數時間複雜度的方法是通過實驗測試得出的。在你的情況下,爲8-puzzle和15-puzzle生成一組n隨機問題,並使用不同的啓發函數解決它們。事情需要注意的是:
的比較將始終取決於幾個因素,如硬件expecs,編程語言,實現算法時,你的技能,...
一般來說,一個更明智的啓發式方法總是會比不那麼知情的方法擴展更少的節點,並且可能會更快。
最後,以三個啓發式比較每個問題集,我會建議,平均運行時間的圖形(重複例如5次,每次的問題),其中:
- 的問題在x軸上按難度排序。
- 運行時間在每個啓發函數的y軸上(如果不能輕易看到替代方案之間的差異,則可能以對數形式表示)。
和具有探索狀態數量的類似圖形。
相關問題
- 1. 無法理解可比性,比較
- 2. 「啓用」類比較
- 3. 比較無法比較
- 4. 加權圖中A *算法的啓發式算法
- 5. 最差啓發式優先級隊列的比較
- 6. 兩種算法求解分數揹包的比較
- 7. 如何比較Dijkstra和A *?
- 8. java arraylists比較A和B
- 9. A-star:多目標的啓發式
- 10. 人工智能:Blocksworld啓發式A *解決方案
- 11. Arraylist.sort要求比較
- 12. 爲A *算法獲取2個座標的啓發式
- 13. git difftool無法啓動超越比較
- 14. A *啓發式,高估/低估?
- 15. A *啓發式創建Bresenham行
- 16. 比較快的方式來比較值
- 17. 無法比較/解密密碼(PHP/Android)
- 18. 如何解釋鏈式比較操作的抽象語法樹?
- 19. 比較算法
- 20. Scipy稀疏矩陣求冪:a ** 16比a * a * a * a * a * a * a * a * a * a * a * a * a * a * a * a * a *
- 21. 的CompareTo()和比較()比較的方法和可比
- 22. A *算法和使用F和G啓發式
- 23. 模式比較
- 24. 請解釋這種比較方法
- 25. 理解的NSString比較
- 26. 如何在A *(運行時啓發式)中模塊化啓發式
- 27. JavaScript模式比較
- 28. 比較JavaScript變量與A HREF
- 29. 比較兩個GET請求
- 30. 比較未發現
啓發式通常通過實驗進行比較。 – harold
但我怎麼能比較他們? –
例如,通過生成僞隨機(將種子和PRNG放入論文中)混洗並記錄探索的節點數量。 – harold