矩阵加速递推
PS:本文章因篇幅有限,就不讲矩阵乘法和快速幂了。
题目:
$$F_n = \left{\begin{aligned} 1 \space (n \le 2) \ F_{n-1}+F_{n-2} \space (n\ge 3) \end{aligned}\right.$$
求 $F_n$。
定义一个矩阵$[Base]$,使:
$$\begin{bmatrix}F_n,F_{n+1}\end{bmatrix}\times\begin{bmatrix}Base\end{bmatrix}=\begin{bmatrix}F_{n+1},F_{n+2}\end{bmatrix}$$
那:
$$\begin{bmatrix}F_n,F_{n+1}\end{bmatrix}\times\begin{bmatrix}Base\end{bmatrix}^2=\begin{bmatrix}F_{n+2},F_{n+3}\end{bmatrix}$$
$$\begin{bmatrix}F_n,F_{n+1}\end{bmatrix}\times\begin{bmatrix}Base\end{bmatrix}^M=\begin{bmatrix}F_{n+M},F_{n+M+1}\end{bmatrix}$$
所以:
$$\begin{bmatrix}F_1,F_{2}\end{bmatrix}\times\begin{bmatrix}Base\end{bmatrix}^{n-1}=\begin{bmatrix}F_{n},F_{n+1}\end{bmatrix}$$
那我们只要找出 $\begin{bmatrix}Base\end{bmatrix}$ 就行了。
经过构造:
$$\begin{bmatrix}Base\end{bmatrix}=\begin{bmatrix}1,1\1,0\end{bmatrix}$$
$F_n$ 就是:
$$\begin{bmatrix}1,1\end{bmatrix}\times\begin{bmatrix}1,1\1,0\end{bmatrix}^{n-1}$$
我们只要得到了递推的公式,就可以找到 $[Base]$,从而加速递推。