Note - 构造转移矩阵加速数列递推的小技巧
一个小寄巧。
适用范围
仅适用于形如 \(f_n = \Sigma k_i f_{n-i}\) 的数列,其中 \(k_i\) 为常数。
方法
设递推式中项数为 \(m\)。
对于矩阵的一个元素 \(M_{i, j}\),有:
\[M_{i,j} = \begin{cases}
k_i &\text{if } j = m \\
[i = j-1] &\text{otherwise.}
\end{cases}
\]
通俗一点,对于前 \(m-1\) 行,在 \(M_{i,j-1}\) 填 \(1\),其它地方填 \(0\);对于第 \(m\) 行,依次填上系数。
证明
有矩阵 \(A,B,C\),其中 \(A\) 为 \([f_{n-m}, f_{n-m+1}, \cdots, f_{n-1}]\),\(C\) 为 \([f_{n-m+1}, f_{n-m+2}, \cdots, f_{n}]\),\(B\) 为转移矩阵,使得 \(A \times B = C\)。显然 \(B\) 为 \(m \times m\) 的矩阵。
因此,\(C = [\Sigma A_{1,i}B_{i,1}, \Sigma A_{1,i}B_{i,2}, \cdots, \Sigma A_{1,i}B_{i,m}]\)
又有 \(C_{1, i-1} = A_{1, i}\ [i > 1]\)
所以有以下两个式子:
\[\begin{align}
& A_{1,i+1} = \Sigma A_{1,i}B_{i,1}\ (i < m)\\
& \Sigma k_{m-i+1} A_{1, i} = \Sigma A_{1,j}B_{i,j}\ (i = m)
\end{align}
\]
由 (1) (2) 即可得上式。
例题
有数列:
\[a_x=
\begin{cases}
1 & x \in\{1,2,3\}\\
a_{x-1}+a_{x-3} & x \geq 4
\end{cases}
\]
求 \(a_n\)。
根据结论构造得:
\[\begin{bmatrix}
0 & 0 & 1 \\
1 & 0 & 0 \\
0 & 1 & 1 \\
\end{bmatrix}
\]