【发布时间】:2020-02-12 16:00:06
【问题描述】:
我了解 Big-O 表示法,但我不知道如何为许多函数计算它。特别是,我一直试图弄清楚斐波那契数列的原始版本的计算复杂性:
int Fibonacci(int n)
{
if (n <= 1)
return n;
else
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
斐波那契数列的计算复杂度是多少,如何计算?
【问题讨论】:
-
在此处查看矩阵表格部分:en.wikipedia.org/wiki/Fibonacci_number。通过做这个矩阵 ^ n (以一种聪明的方式),你可以计算 O(lg n) 中的 Fib(n)。诀窍在于执行幂函数。关于这个确切的问题以及如何在 O(lg n) 中解决,iTunesU 上有一个非常好的讲座。该课程介绍了麻省理工学院第 3 课的算法(完全免费,如果您有兴趣,请查看)
-
上述 cmets 都没有解决这个问题,这是关于朴素版本(在发布的代码中)的计算复杂性,而不是矩阵形式或非递归计算等更智能的版本。
-
一个非常棒的视频here 讨论了递归实现的下限复杂度(2^n/2)和上限复杂度(2^n)。
-
附注查询:斐波那契数列的朴素实现应该是迭代还是递归?
标签: time-complexity big-o complexity-theory fibonacci