【问题标题】:SICP: I'm having trouble understanding the time complexity of the Fibonacci algorithimSICP:我无法理解斐波那契算法的时间复杂度
【发布时间】:2020-05-18 10:20:39
【问题描述】:

我正在阅读 SICP。这是我对计算机科学的第一次介绍。

本书介绍了下面的斐波那契算法:

(define (fib n)
  (cond 
    ((= n 0) 0)
    ((= n 1) 1)
    (else (+ (fib (- n 1)) 
             (fib (- n 2))))))

书上提到这个算法占用的空间是????(n),耗时是????n)。我理解空间复杂度,因为它是树的最大深度,但我似乎无法理解时间复杂度是如何得出的。

【问题讨论】:

    标签: algorithm math scheme time-complexity fibonacci


    【解决方案1】:

    如果你记下每种情况需要多少时间(1 是常数),

    T(0) = 1
    T(1) = 1
    T(n) = T(n-1) + T(n-2)
    

    您会发现它与斐波那契数完全一样。
    正如文本(几乎)所说,Fib(n)是?(φn)。

    【讨论】:

    • 其中 φ = (1 + sqrt(5)) / 2?但这是 fib(n) 的近似大小,而不是计算它的复杂性。
    • @PresidentJamesK.Polk 如果你取 f(10) 并使用替换模型,你最终会得到一条将 1 加到 f(10) 次的行。因此fib(n) 的复杂度是O(fib(n))
    猜你喜欢
    • 2023-03-07
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    相关资源
    最近更新 更多