函数语言中的动态编程

时间:2013-02-05 11:46:37

标签: haskell functional-programming

我研究哈斯克尔。我遇到的问题是我无法保存中间计算步骤。感觉无效。如何在函数式编程中使用动态编程?

1 个答案:

答案 0 :(得分:6)

  

我遇到[在Haskell中]我无法保存中间问题   计算步骤。

我不知道你曾经学过什么资源,但他们显然不是最好的。

例如:

let 
    intermediate = {- calculation step -}
in ...

将计算步骤的结果保存在intermediate中。 (更好:它将变量intermediate绑定到值。)

此外,引用相关的维基百科条目:

  

在数学,计算机科学和经济学,动态编程   是一种解决复杂问题的方法   更简单的子问题。它适用于展出的问题   重叠子问题的性质[1]和最优子结构   (如下面所描述的)。适用时,该方法所花费的时间要少得多   比天真的方法。

     

动态编程背后的关键思想非常简单。一般来说,   要解决一个给定的问题,我们需要解决不同的部分   问题(子问题),然后结合子问题的解决方案   达到整体解决方案。通常,许多这些子问题都是   真的一样。动态编程方法旨在解决每个问题   子问题只有一次,从而减少了计算次数:一次   已经计算了给定子问题的解,存储或者   “memo-ized”:下次需要相同的解决方案时,它很简单   抬起头来。这种方法在数量上特别有用   重复的子问题随着大小的增加呈指数增长   输入。

很明显,Haskell很好地支持这种解决问题的方式。例如,在最简单的情况下,可以携带地图,这可以保留已经解决的子问题及其解决方案。更先进的方法可以使用State Monad。等等。