Was*_*han 2 algorithm math big-o proof fibonacci
我很难证明斐波那契的"坏"版本是O(2 ^ n).IE浏览器.鉴于功能
int fib(int x)
{
if ( x == 1 || x == 2 )
{
return 1;
}
else
{
return ( f( x - 1 ) + f( x - 2) );
}
}
Run Code Online (Sandbox Code Playgroud)
我可以得到帮助证明这是O(2 ^ n).
让我们从为运行时编写递归关系开始:
T(1)= 1
T(2)= 1
T(n + 2)= T(n)+ T(n + 1)+ 1
现在,让我们猜一下
T(N)≤2 Ñ
如果我们试图通过归纳证明这一点,那么基本案例会检查:
T(1)=1≤2= 2 1
T(2)=1≤4= 2 2
然后,在归纳步骤中,我们看到:
T(n + 2)= T(n)+ T(n + 1)+ 1
≤2 Ñ + 2 N + 1 + 1
<2 n + 1 + 2 n + 1
= 2 n + 2
因此,通过感应,我们可以得出结论,T(N)≤2 Ñ对任意n,因此T(N)= O(2 Ñ).
通过更精确的分析,您可以证明T(n)= 2F n - 1,其中F n是第n个Fibonacci数.这证明,更准确地,即T(N)=Θ(φ Ñ),其中φ是黄金比例,这大约是1.61.注意,φ Ñ = O(2 Ñ)(使用小O符号),所以这是一个更好的结合.
希望这可以帮助!