我學習haskell。我遇到了無法保存中間計算步驟的問題。這感覺無效。如何在函數式編程中使用動態編程?功能語言動態編程
Q
功能語言動態編程
0
A
回答
6
我遇到[在Haskell],我不能保存中間 計算步驟的問題。
我不知道你用什麼資源來學習它,但它們顯然不是最好的。
例如:
let
intermediate = {- calculation step -}
in ...
保存在intermediate
計算步驟的結果。 (更好:它的可變intermediate
結合的價值。)
另外,舉相關的維基百科條目:
在數學,計算機科學,經濟學,動態規劃 是解決方法通過將它們分解爲 更簡單的子問題來解決複雜的問題。它適用於展示重疊子問題[1]和最佳子結構 (下面描述)的屬性的問題。如果適用,該方法比天真方法花費的時間少得多。
動態規劃背後的關鍵思想非常簡單。一般來說, 爲了解決一個給定的問題,我們需要解決 問題(子問題)的不同部分,然後結合子問題的解決方案 來達成一個整體解決方案。通常,這些子問題中的很多是 真的是一樣的。動態規劃方法試圖僅解決每個子問題一次,從而減少了計算次數:一旦計算出給定子問題的解決方案,它將被存儲或「備忘錄」:下一次相同的解決方案是需要的,它只是 擡頭。當重複子問題的數量隨着輸入大小的函數呈指數增長時,此方法尤其有用。
很明顯,這種解決問題的方式得到了Haskell的很好的支持。例如,在最簡單的情況下,可以攜帶一張地圖,這樣可以保留已經解決的子問題及其解決方案。更高級的方法可以使用State Monad。等等。
相關問題
- 1. 動態LINQ語言功能
- 2. CodeIgniter動態語言功能
- 3. 編程語言功能
- 4. 功能反應編程語言規範
- 5. 功能彙編語言
- 6. 動態語言中的安全編程
- 7. '動態'搜索的編程語言?
- 8. 自動機編程語言
- 9. 爲什麼不能編程語言關選擇「功能」
- 10. 編程語言
- 11. 靜態和動態編程語言不同
- 12. 語言功能vs框架功能
- 13. 用動態語言編寫.NET?
- 14. 功課彙編語言
- 15. CSS編程語言中分號的主要功能是什麼?
- 16. 有什麼理論和/或實驗編程語言功能?
- 17. 動態語言智能感知
- 18. Javascript作爲功能語言
- 19. 功能的「自然語言」
- 20. Lisp語言的功能
- 21. Mailchimp多語言功能
- 22. 編程語言如何同時支持功能和麪向對象編程?
- 23. 編程語言C
- 24. NesC編程語言
- 25. C編程語言
- 26. Siri編程語言
- 27. .NET編程語言
- 28. R語言編程
- 29. SIMD編程語言
- 30. Scheme編程語言
你可以使用延續和瓶蓋用於存儲中間值:http://en.wikipedia.org/wiki/Dynamic_programming_language#Functional_programming – Christian
這個問題是過於抽象。你能給一個你想解決的具體問題嗎?獎金點,如果它是如此具體,實際上有一些代碼不能做你想做的。 –
到目前爲止,我還沒有在Haskell中做過很多動態編程,但感覺就像懶惰和純潔會成爲你的朋友。只需構建一個代表中間值的數據類型(例如您的維特比晶格),並使用遞歸算法向其中填充值。 如果您提出更具體的問題,我可以嘗試幫助更多。 –