时间/空间复杂度
时间复杂度与空间复杂度
例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) 的影响,有助于在写代码过程中下意识书写更高效的代码 (我:在不失可读性的情况下)。
参考
Last updated