时间/空间复杂度

时间复杂度与空间复杂度

例1:Factorial

Recursive Version

(define fact (lambda (n)
  (if (n = 1) 
     1
     (* n (fact (- n 1))))))
; 递归版本
; (fact 4)
; (if (= 4 1) 1 (* 4 (fact (- 4 1))))
; (* 4 (fact 3))
; (* 4 (if = 3 1) 1 (* 3 (fact (- 3 1))))
; (* 4 (* 3 (fact 2)))
; (* 4 (* 3 (if (= 2 1) 1 (* 2 (fact (- 2 1))))))
; (* 4 (* 3 (* 2 (fact 1))))
; (* 4 (* 3 (* 2 (if (= 1 1) 1 (* 1 fact (-1 1))))))
; (* 4 (* 3 (* 2 1)))
; (* 4 (* 3 2))
; (* 4 6)
; 24

; 空间复杂度: θ(n)
; 时间复杂度: θ(n)

Iterative Version

例2:Fibonacci

例3:pow(a, b)

Recursive Version

Iterative Version

Faster Recursive Version

例4:杨辉三角 (计算 n 行 j 列数值)

小结

本课目的在于利用替代模型展开不同程序的计算过程,从而直接体会不同程序的设计方式对复杂度 (order of growth) 的影响,有助于在写代码过程中下意识书写更高效的代码 (我:在不失可读性的情况下)。

参考

MIT6.006-SICP-2005-lecture-notes-4

Last updated