Algorithm 理解大O符号O(2^N)
我试图理解下面计算斐波那契级数的递归函数是如何落在符号O(2^N)下的Algorithm 理解大O符号O(2^N),algorithm,time-complexity,big-o,Algorithm,Time Complexity,Big O,我试图理解下面计算斐波那契级数的递归函数是如何落在符号O(2^N)下的 我知道我的问题很琐碎。请把我当作初学者,尝试学习Big-O符号。 < P>大OH为您的算法运行时提供了上界。就是, 您必须将O(2^n)中的fib(n)理解为您的算法最多执行2^n步才能返回结果。有时,上界并不那么精确(事实就是这样)。你也可以说fib在O(n!),这是另一个上界(一个非常糟糕的上界) 为了说明算法的精确运行时间,您必须使用θ表示法,在这种情况下,fib是θ(Phi^n),其中Phi是黄金比率。您可以通过归纳
我知道我的问题很琐碎。请把我当作初学者,尝试学习Big-O符号。 < P>大OH为您的算法运行时提供了上界。就是, 您必须将O(2^n)中的fib(n)理解为您的算法最多执行2^n步才能返回结果。有时,上界并不那么精确(事实就是这样)。你也可以说fib在O(n!),这是另一个上界(一个非常糟糕的上界)
为了说明算法的精确运行时间,您必须使用θ表示法,在这种情况下,fib是θ(Phi^n),其中Phi是黄金比率。您可以通过归纳法来证明这一点。大O表示法并不意味着计算实际操作数/时间量/内存量。这意味着当N朝无穷大方向增长时,对这些数量的总体增长率或增长形状进行建模。请注意,常数因子与Big-O无关-3xo(2^N)和100xo(2^N)之间没有差异。这根本不是一个数字
15x和16x之间的差异在按比例的性能情况下是没有意义的,而N^2和N^2.1之间的差异对于足够大的N来说是巨大的。你可以看看这里的理论()
int fibo(int num)
{
if (num <= 1) return num;
return fibonacci(num - 2) + fibonacci(num - 1);
}
fibo(5)
--------------------
/ \
fibo(3) fibo(4)
------------ -------------
/ \ / \
fibo(2) fibo(1) fibo(3) fib0o(2)
---------------- ---------- -------------
/ \ / \ / \
fibo(1) fibo(1) fibo(2) fibo(1) fibo(1) fibo(0)
---------
/ \
fibo(1) fibo(0)