版权声明:欢迎转载,但请注明出处,若有什么不对的地方,欢迎指正,https://blog.csdn.net/wutenglong123/article/details/82764585
斐波那契数列的性质多种多样,截至现在,人么依然没有将之研究透彻,本文就从中选取几个有趣的性质分析。
Fib数列的定义如下:
F ( n ) = { 0 i f n = 0 1 i f n = 1 F n − 1 + F n − 2 i f n ≥ 2 F(n)=\left\{ \begin{aligned} &0 &if\ n=0 \\ &1 &if \ n =1 \\ &F_{n-1}+F_{n-2} &if \ n\ge 2 \end{aligned} \right. F(n)=⎩⎪⎨⎪⎧01Fn−1+Fn−2if n=0if n=1if n≥2
class solution{
public:
int fib(int n){
if(n == 1)return 0;
if(n == 2)return 1;
else return fib(n-1)+fib(n-2);
}
时间复杂度分析:
我们先给出时间复杂度,然后证明。
由递推式:
F n = F n − 1 + F n − 2 F_n = F_{n-1}+F_{n-2} Fn=Fn−1+Fn−2
则有:
O ( n ) = Ω ( φ n ) O(n) =\Omega(\varphi^n) O(n)=Ω(φn)
其中
φ = 1 + 5 2 \varphi =\frac{1+\sqrt5}{2} φ=21+5(Golden section
)
证明如下:
由初始条件解二阶齐次差分方程:
F n = F n − 1 + F n − 2 F_n = F_{n-1}+F_{n-2} Fn=Fn−1+Fn−2 得 λ 2 − λ − 1 = 0 \lambda^2-\lambda-1=0 λ2−λ−1=0
解 得 λ = 1 ± 5 2 解得\lambda=\frac{1\pm \sqrt5}{2} 解得λ=21±5
则 F n ‾ = A 1 ( λ 1 ) n + A 2 \overline{F_n} = A_1(\lambda_1)^n+A_2 Fn=A1(λ1)n+A2
……
……(见考研数学二
)得 :
x = 1 5 [ ( ( 1 + 5 2 ) n − ( 1 − 5 2 n ) ] x = \frac{1}{\sqrt5}[(\frac{(1+\sqrt5}{2})^n-(\frac{1-\sqrt5}{2}^n)] x=51[(2(1+5)n−(21−5n)]
整理得
( 1 + 5 ) n − ( 1 − 5 ) n 2 n − 1 \frac{(1+\sqrt5)^n-(1-\sqrt5)^n}{2^{n-1}} 2n−1(1+5)n−(1−5)n
< ( 1 + 5 2 ) n <(\frac{1+\sqrt5}{2})^n <(21+5)n
故 O ( n ) = Ω ( φ n ) 故O(n) =\Omega(\varphi^n) 故O(n)=Ω(φn)
class solution{
public:
int fib(int n){
int val=0;
int num1=0;
int num2=1;
while(val<n)
val+=num2+num1;
num2 = val;
}return val;
}
由于已经计算除了前两项,因此时间是线性的。
T ( n ) = Θ ( n ) T(n) = \Theta(n) T(n)=Θ(n)
然而这样的解法是否为最优的解呢?显然不是。
F n = r o u n d ( φ n 5 ) F_n = round(\frac{\varphi^n}{\sqrt5}) Fn=round(5φn)
对
φ n 5 \frac{\varphi^n}{\sqrt5} 5φn四舍五入即为其
F n F_n Fn
由于计算机无法精确保留 φ , 5 \varphi,\sqrt5 φ,5等,导致我们会缺失一些重要位,所以无法在计算机上实现。
T h e o r e m : Theorem: Theorem:
( F n + 1 F n F n F n − 1 ) = ( 1 1 1 0 ) n \begin{array}{lc} \begin{pmatrix}F_{n+1}&F_n\\F_n&F_{n-1}\\ \end{pmatrix}= \begin{pmatrix}1&1\\1&0\\ \end{pmatrix}^n\\ \end{array} (Fn+1FnFnFn−1)=(1110)n
在 l o g n 的 时 间 内 计 算 矩 阵 的 logn的时间内计算矩阵的 logn的时间内计算矩阵的n 次 幂 次幂 次幂
T ( n ) = Θ ( l g n T(n) = \Theta(lgn T(n)=Θ(lgn)1
证:
对 n n n进行归纳:
1、 ( 1 1 1 0 ) 1 = ( F 2 F 1 F 1 F 0 ) \begin{array}{lc} \begin{pmatrix}1&1\\1&0\\ \end{pmatrix}^1= \begin{pmatrix}F_{2}&F_1\\F_1&F_{0}\\ \end{pmatrix}\\ \end{array} (1110)1=(F2F1F1F0)正确
2、当 ( F n F n − 1 F n − 1 F n − 2 ) ⋅ ( 1 1 1 0 ) = ( F n + 1 F n F n F n − 1 ) \begin{array}{lc}\begin{pmatrix}F_{n}&F_{n-1}\\F_{n-1}&F_{n-2}\\ \end{pmatrix} ·\begin{pmatrix}1&1\\1&0\\ \end{pmatrix}= \begin{pmatrix}F_{n+1}&F_n\\F_n&F_{n-1}\\\end{pmatrix} \end{array} (FnFn−1Fn−1Fn−2)⋅(1110)=(Fn+1FnFnFn−1)
正确
3、
得
( F n + 1 F n F n F n − 1 ) = ( 1 1 1 0 ) n \begin{array}{lc} \begin{pmatrix}F_{n+1}&F_n\\F_n&F_{n-1}\\ \end{pmatrix}= \begin{pmatrix}1&1\\1&0\\ \end{pmatrix}^n\\ \end{array} (Fn+1FnFnFn−1)=(1110)n正确
同样我们可用归纳法证明Fibonacci sequence
F n = Φ n − ( − 1 Φ ) n 5 F_n = \frac{\Phi^n -(\frac{-1}{\Phi})^n}{\sqrt5} Fn=5Φn−(Φ−1)n 此处略。
l o g log log 与 l g lg lg的区别详见: ↩︎