回答
啓發式是用來平衡性能(通常是執行速度,但也是內存消耗)與潛在的準確性或一般性。例如,您的防病毒軟件使用啓發式來描述病毒的外觀,並可利用該信息確定哪些文件應該花費更多時間進行分析。一個好的啓發式方法具有可以以最小的成本節省大量時間的特性。
在圖遍歷理論中,A *搜索算法的啓發式算法不一定是完美的。它只需要有一個小於或等於目標狀態真實成本的預測成本函數h(x),以保證最優解。 h(x)越接近真實成本,就可以找到最快的解決方案。
非常感謝。你的回答幫助我清除了疑問。 –
讓我給你一個例子,它可以幫助你理解啓發式的重要性。 在人工智能中,搜索問題主要分爲盲搜索和定向搜索。盲目搜索是您使用BFS和DFS等算法的地方,他們被稱爲盲目搜索的原因,他們對您應該走的方向沒有任何瞭解,您只需探索和探索,直到您到達目標節點,設想這些算法的時間和空間複雜性。
現在,如果您查看定向搜索算法(如A *),其中有某種啓發式函數或簡單的術語,則應假定您應該採取下一步的哪個方向。
儘管啓發式方法並不能保證最好的結果,反而會嘗試給你一個更好的解決方案,有時甚至是最好的。有很多種類的問題(比如你玩的遊戲),有更好的解決方案來完成任務,而不是浪費太多時間和空間尋找最佳解決方案。
我希望它有幫助。
非常感謝。 –
- 1. WebClient.UploadString方法不發出BOM。爲什麼?
- 2. 什麼是啓發式fencepost?
- 3. 爲什麼編譯器爲非虛擬方法發出callvirt?
- 4. 爲什麼JsonStore提供commitchanges方法
- 5. 爲什麼jQuery不提供.firstChild方法?
- 6. 爲什麼java.time.LocalDateTime不提供toDate()方法?
- 7. 爲什麼提起觸發器的方法?
- 8. 爲什麼touchUp方法不觸發?
- 9. 爲什麼Django提出「KeyError」?
- 10. 爲什麼我的方法拋出`UnsatisfiedLinkError`?
- 11. 爲什麼NetworkInterface的方法拋出SocketException
- 12. 爲什麼SaveAs方法拋出錯誤?
- 13. 爲什麼此方法拋出IllegalMonitorStateException?
- 14. 爲什麼setTableHeader()方法拋出NullPointerException?
- 15. 啓發式算法和算法之間的聯繫是什麼?
- 16. 爲什麼A *算法的啓發式算法是不可接受的?
- 17. 爲什麼我以這種方式啓動iswitchb模式?
- 18. 爲什麼會發出NullReferenceException?
- 19. NetworkX-Python中的啓發式方法
- 20. 匹配點的啓發式方法
- 21. 以編程方式啓用輸出緩存ASP.NET不起作用 - >爲什麼?
- 22. 爲什麼在重新啓動mysql slave時發出'reset master'
- 23. 爲什麼Java集合不提供方便的映射方法?
- 24. 在JavaScript中,爲什麼blur方法觸發blur事件,但submit方法不會觸發提交事件?
- 25. 啓發式被認爲是可接受的是什麼意思?
- 26. 爲什麼可接受啓發式工作?
- 27. 爲什麼這種啓發式可以接受?
- 28. 爲什麼GWT開發模式「重啓服務器」失敗?
- 29. 爲什麼模式沒有啓用?
- 30. 爲什麼self.navigationController =無方法
你不能總是計算一個「正確的」結果。例如,想想深度遊戲的人工智能。 –
這個問題似乎是離題。它屬於http://programmers.stackexchange.com/ –
把你的女朋友帶到一家高檔餐廳將是完美的,但如果你負擔不起,你可以買一瓶葡萄酒,做一些晚餐,這將是足夠好的。 ;-) – Leo