2012年9月29日

scheme中表只能操作头部带来的一个问题

摘要: 很多简单的算法,为了能够转成尾递归,不得不采取比较繁琐的计算过程,或者使用多遍的遍历过程。在scheme中,比如map的实现,按照定义的实现(define (map p l) (if (null? l) '() (cons (p (car l)) (map p (cdr l)))))是一个普通的递归,无法转成迭代进行计算。为了使用迭代的结构,必须首先定义一个list的反转过程,其定义为(define (reverse l) (define (reverse-iter r l) (if (null? l) r (reverse-iter (cons (car l) r) (cdr l)) 阅读全文

posted @ 2012-09-29 22:55 mathlover 阅读(322) 评论(0) 推荐(0) 编辑

带记忆的lazy evaluation 与 动态规划

摘要: lazy evaluation为了提高效率,一般提供一个结构来保存结果,当且仅当输入的值没有eval过才进行求值,否则是返回保存的结果。这个特性很适合用来实现动态规划。在动态规划中,最主要的是要找出问题的最优子结构,最常用的实现方法就是使用表格来记录所有子结构的结果。这种使用表格来记录子结构的结果的技术如果使用lazy evaluation来实现的话,非常简单。只要写出动态规划的递归式子,直接用递归式求解就可以得到最优解了。由于lazy evaluation中带有记忆,每个子结构只能被求值一次,从效率的角度来说是非常合算的。表格被求值器隐式的维护着。最近读SICP,发现带记忆的lazy eva 阅读全文

posted @ 2012-09-29 19:07 mathlover 阅读(223) 评论(0) 推荐(0) 编辑

导航