【问题标题】:How to proof the time complexity of this Fibonacci sequence is O(n)如何证明这个斐波那契数列的时间复杂度是 O(n)
【发布时间】:2019-03-02 03:11:08
【问题描述】:

在下面的代码中,我知道时间复杂度是 O(n),但是我如何以正确的方式证明呢? 是说搜索数组O(n)就够了吗?

int f[N];
F(n)
{
    if (f[n] >= 0) return f[n];
    f[n] = F(n-1) + F(n-2);
    return f[n];
}

int main()
{
    read n;
    f[0] = 0; f[1] = 1;
    for (i = 2; i <= n; i++)
        f[i] = -1;
    print F(n);
}

【问题讨论】:

    标签: time-complexity fibonacci


    【解决方案1】:

    对于您调用 F 的数组的每个元素。在您看来,这似乎是一种递归,但却是一个糟糕的实现。每个 f[n-1] 和 f[n-2] 调用实际上只是返回值。

    你将有 3n 次调用 F(n),所以仍然是 O(n)。

    如果你不需要递归,你可以用一个循环来编程。

    【讨论】:

      猜你喜欢
      • 2018-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-28
      • 1970-01-01
      • 2020-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多