之前存在OneNote.这两天学着使用latex就搬过来了
定义
斐波那契数列可以表示成如下:
F
i
b
(
x
)
=
{
0
,
x
=
0
1
,
x
=
1
F
i
b
(
x
−
1
)
+
F
i
b
(
x
−
2
)
,
x
≥
2
(
通
项
公
式
)
1
5
[
(
1
+
5
2
)
x
−
1
−
5
2
)
x
]
,
x
∈
Z
(
内
比
公
式
)
[
F
i
b
(
x
+
1
)
F
i
b
(
x
)
F
i
b
(
x
)
F
i
b
(
x
−
1
)
]
=
[
1
1
1
0
]
x
,
x
∈
[
1
,
∞
]
矩
阵
形
式
Fib(x)=\left\{ \begin{aligned} &0&, x=0& \\ &1&, x=1& \\ &Fib(x-1)+Fib(x-2) &,x\ge2 &(通项公式) \\ &\frac{1}{\sqrt{5}}[(\frac{1+\sqrt5}{2})^x-\frac{1-\sqrt5}{2})^x] &,x\in \mathbb{Z}&(内比公式)\\ &\begin{bmatrix} Fib(x+1) & Fib(x) \\ Fib(x) & Fib(x-1) \end{bmatrix}=\begin{bmatrix} 1 & 1 \\ 1 & 0 \end{bmatrix}^x &,x\in[1,\infty] & 矩阵形式 \end{aligned} \right.
Fib(x)=⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧01Fib(x−1)+Fib(x−2)51[(21+5)x−21−5)x][Fib(x+1)Fib(x)Fib(x)Fib(x−1)]=[1110]x,x=0,x=1,x≥2,x∈Z,x∈[1,∞](通项公式)(内比公式)矩阵形式
其中内比公式是很好的使用无理数表示有理数的范例.
计算x比较大时需要避免使用通项公式.
在某种理解里,可以把通项公式求得理解成简单的dynamic program.
复杂度
- 常规方法时空在n左右
- 矩阵形式通过分治和矩阵快速幂以矩阵乘为基本单位达到 T ( l o g n ) T(logn) T(logn),单次矩阵乘涉及8次整数相乘.总体复杂度不变
- 内比公式达到以计算为基本单位是 T ( 1 ) T(1) T(1),以基础计算为基本单位通过分治快速幂在 T ( l o g n ) T(logn) T(logn)