矩阵快速幂的构造技巧:从递推式到矩阵

本篇文章只是矩阵快速幂中递推式到矩阵的构造杂谈,前置知识矩阵乘法与快速幂请自行了解学习。

一、从斐波那契数列入门:最基础的矩阵构造

斐波那契数列的递推式为:

\[ f(n) = \begin{cases} 1, & n = 1,2 \\ f(n-1) + f(n-2), & n \geq 3 \end{cases} \]

我们的目标是构造一个转移矩阵,使得递推关系可以用“矩阵乘法 + 幂次”的形式表示。

观察递推式的依赖关系:\(f(n)\)\(f(n-1)\)\(f(n-2)\) 线性组合而成。因此,我们构造向量和矩阵如下:

\[\begin{bmatrix} f(n) \\ f(n-1) \end{bmatrix} = \begin{bmatrix} 1 & 1 \\ 1 & 0 \end{bmatrix} \cdot \begin{bmatrix} f(n-1) \\ f(n-2) \end{bmatrix} \]

重复这个过程,可推导出通式:

\[\begin{bmatrix} f(n) \\ f(n-1) \end{bmatrix} = \begin{bmatrix} 1 & 1 \\ 1 & 0 \end{bmatrix}^{n-2} \cdot \begin{bmatrix} f(2) \\ f(1) \end{bmatrix} \]

这里的核心逻辑是:转移矩阵的每一行,对应“当前项由哪些前项线性组合而成”。对于斐波那契数列,\(f(n)\)\(f(n-1)\)(系数1)和 \(f(n-2)\)(系数1)相加得到,因此转移矩阵第一行是 [1, 1];而 \(f(n-1)\) 仅由 \(f(n-1)\) 自身(系数1)和 \(f(n-2)\)(系数 \(0\) )组成,因此第二行是 [1, 0]

二、线性递推的通用构造:二阶递推式 \(G_i = a \cdot G_{i-1} + b \cdot G_{i-2}\)

对于更一般的二阶线性递推式 \(G_i = a \cdot G_{i-1} + b \cdot G_{i-2}\)(如线性齐次递推),构造逻辑与斐波那契类似,只需调整系数即可。

构造向量和转移矩阵:

\[\begin{bmatrix} G_i \\ G_{i-1} \end{bmatrix} = \begin{bmatrix} a & b \\ 1 & 0 \end{bmatrix} \cdot \begin{bmatrix} G_{i-1} \\ G_{i-2} \end{bmatrix} \]

推导过程与斐波那契一致,最终通式为:

\[\begin{bmatrix} G_i \\ G_{i-1} \end{bmatrix} = \begin{bmatrix} a & b \\ 1 & 0 \end{bmatrix}^{i-2} \cdot \begin{bmatrix} G_2 \\ G_1 \end{bmatrix} \]

三、带常数项的递推式:如何处理“加常数”的情况?

若递推式包含常数项,例如 \(f(n) = a \cdot f(n-1) + b \cdot f(n-3) + c\),我们需要扩充向量维度,将常数项纳入状态中。

\(f(n) = a \cdot f(n-1) + b \cdot f(n-3) + c\) 为例,构造向量需包含 \(f(n), f(n-1), f(n-2), c\)(这里将常数 \(c\) 视为“状态”,其自身的递推是 \(c \to c\),即系数为1):

\[\begin{bmatrix} f(n) \\ f(n-1) \\ f(n-2) \\ c \end{bmatrix} = \begin{bmatrix} a & 0 & b & 1 \\ 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \cdot \begin{bmatrix} f(n-1) \\ f(n-2) \\ f(n-3) \\ c \end{bmatrix} \]

  • 第一行:\(f(n) = a \cdot f(n-1) + 0 \cdot f(n-2) + b \cdot f(n-3) + 1 \cdot c\),对应递推式。
  • 第二行:\(f(n-1) = 1 \cdot f(n-1) + 0 \cdot f(n-2) + 0 \cdot f(n-3) + 0 \cdot c\),即“自身传递”。
  • 第三行:\(f(n-2) = 0 \cdot f(n-1) + 1 \cdot f(n-2) + 0 \cdot f(n-3) + 0 \cdot c\),同理“自身传递”。
  • 第四行:\(c = 0 \cdot f(n-1) + 0 \cdot f(n-2) + 0 \cdot f(n-3) + 1 \cdot c\),常数自身保持不变。

四、带变量项的递推式:利用二项式定理构造(以 \(n^k\) 为例)

若递推式包含变量项(如 \(n^3, n^2\) 等),直接构造矩阵会比较困难。此时可利用二项式定理拆分变量项,将其转化为“前项的多项式组合”,再扩充状态维度。

以递推式 \(f(1)=1, f(2)=2, f(n) = f(n-1) + 2f(n-2) + n^3\) 为例,核心是拆分 \(n^3\)

由二项式定理,\(n^3 = (n-1 + 1)^3 = (n-1)^3 + 3(n-1)^2 + 3(n-1) + 1\)

因此,我们需要将 \(f(n), f(n-1), n^3, n^2, n, 1\) 都纳入状态向量,构造转移矩阵:

\[\begin{bmatrix} f(n) \\ f(n-1) \\ n^3 \\ n^2 \\ n \\ 1 \end{bmatrix} = \begin{bmatrix} 1 & 2 & 1 & 3 & 3 & 1 \\ 1 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 3 & 3 & 1 \\ 0 & 0 & 0 & 1 & 2 & 1 \\ 0 & 0 & 0 & 0 & 1 & 1 \\ 0 & 0 & 0 & 0 & 0 & 1 \end{bmatrix}^{n-2} \cdot \begin{bmatrix} f(2) \\ f(1) \\ 8 \\ 4 \\ 2 \\ 1 \end{bmatrix} \]

  • 第一行:\(f(n) = 1 \cdot f(n-1) + 2 \cdot f(n-2) + 1 \cdot (n-1)^3 + 3 \cdot (n-1)^2 + 3 \cdot (n-1) + 1 \cdot 1\),对应递推式和 \(n^3\) 的拆分。
  • 第二行:\(f(n-1)\) 自身传递。
  • 第三行到第六行:分别对应 \(n^3, n^2, n, 1\) 的二项式拆分(如 \(n^3 = (n-1)^3 + 3(n-1)^2 + 3(n-1) + 1\),因此第三行是 [0, 0, 1, 3, 3, 1]

五、带前缀和的递推式:扩充“和状态”

若问题涉及前缀和(如求 \(T[a] + T[a+1] + \dots + T[b]\)),可将“前缀和”作为新状态纳入向量。

以递推式 \(T[0]=T[1]=T[2]=1, T[n]=T[n-1]+T[n-2]+T[n-3] \ (n \geq 3)\) 为例,设前缀和 \(S[n] = T[0] + T[1] + \dots + T[n]\),则递推关系可扩展为:

\[\begin{bmatrix} S[n] \\ T[n] \\ T[n-1] \\ T[n-2] \end{bmatrix} = \begin{bmatrix} 1 & 1 & 1 & 1 \\ 0 & 1 & 1 & 1 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix} \cdot \begin{bmatrix} S[n-1] \\ T[n-1] \\ T[n-2] \\ T[n-3] \end{bmatrix} \]

  • 第一行:\(S[n] = S[n-1] + T[n] = S[n-1] + T[n-1] + T[n-2] + T[n-3]\),因此系数为 [1, 1, 1, 1]
  • 第二行:\(T[n] = T[n-1] + T[n-2] + T[n-3]\),系数为 [0, 1, 1, 1]
  • 第三、四行:\(T[n-1]\)\(T[n-2]\) 自身传递,分别对应 [0, 1, 0, 0][0, 0, 1, 0]

参考文献
[1]:https://www.cnblogs.com/tscjj/p/14630466.html

posted @ 2025-10-30 21:51  Ke_scholar  阅读(3)  评论(0)    收藏  举报