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) 即可得上式。

例题

P1939 矩阵加速(数列)

有数列:

\[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} \]

posted @ 2025-07-22 10:03  Hootime  阅读(20)  评论(0)    收藏  举报