Algorithm 理解大O符号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是黄金比率。您可以通过归纳

我试图理解下面计算斐波那契级数的递归函数是如何落在符号O(2^N)下的


我知道我的问题很琐碎。请把我当作初学者,尝试学习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)