Lec1b-计算过程

Locke 在 An Essay Concerning Human Understanding(1690) 中将人类的心智活动归为三种表现:

  • 将几种简单的认识组合为一种复合认识,从而产生复杂的认识

  • 将两种认识进行对比,无论简单或复杂。不将他们合二为一,从而得到对于他们相互联系的认识。

  • 将有关认识与那些在实际中和它相伴的其他认识隔离开来,得到普遍的认识。此乃抽象。

理解计算机对特定过程->特定模式使用的工程模型

kinds of expressions

numbers
symbols
lambda-expressions
definitions
conditionals
combinations

表达式求值规则

不断进行代换,归约。计算机自顶向下由繁杂的抽象层次组成,要学会忽略细节。避免不必要的观察 计算和思考 关注一层层的抽象,分析时按层次进行归约向上。但是计算机实际运行顺序可能不同。

迭代与抽象

1
2
3
4
5
6
7
8
9
10
(define (+ x y)
(if (= x 0)
y
(+ (-1+ x) (1+ y))))
;递归形式的迭代
(define (+ x y)
(if (= x 0)
y
(1+ (+ (-1+ x) y))))
;本质的递归,空间复杂度高,最后要计算每层返回的1

迭代就像是操场永不回头的跑圈,不断利用相同的优化过程将输出作为新的输入,使问题推进到一个个里程碑,直到符合答案的要求。它可以仅用400m的长度去完成42km马拉松的赛程规模的问题,同时它的空间复杂度仅仅只在于过程的大小(一圈的长度),是常数级。

递归则像是一棵可以回溯的树,不断使用一种计算过程得到部分解直到到达底部的边界条件,此时的空间复杂度最高,为树的深度。再将边界的解与每层的解结合回溯到根节点,起点同时也是终点。整体的计算是一个展开再收缩的过程。

以汉诺塔为例,分解出依次移动底部盘子的过程。

1
2
3
4
5
(define (move N from to space)
(cond ((= N 0) "done")
(else (move (-1+ N) from space to)
(print-move from to)
(move (-1+ N) space to from))))