常系数齐次线性递推初探

常系数齐次线性递推式第n项的快速计算初探 XJB学后的XBJ胡扯

要做啥?

\(f[n]=\sum_{i=1}^ka[i]f[n-i]\)\(a,f[1\to k]\)已经给出。

我会矩阵快速幂!

时间复杂度\(O(k^3\log n)\),其中\(n\le 10^9,k\le32000\),emmm。

会魔法!

设初始状态矩阵为\(S\),转移矩阵为\(A​\),不难发现一步转移长得像这个样子(四阶情形)
\[ \begin{bmatrix} f[n]\\ f[n-1]\\ f[n-2]\\ f[n-3] \end{bmatrix} =\begin{bmatrix} a[1]&a[2]&a[3]&a[4]\\ 1&0&0&0\\ 0&1&0&0\\ 0&0&1&0\\ \end{bmatrix} \begin{bmatrix} f[n-1]\\ f[n-2]\\ f[n-3]\\ f[n-4] \end{bmatrix} \]
\(n=n-k​\),构造序列\(c​\)满足\(A^n=\sum_{i=0}^{k-1}c[i]A^i​\),两边同时右乘\(S​\)
\[ A^nS=(\sum_{i=0}^{k-1}c[i]A^i)S=\sum_{i=0}^{k-1}c[i]A^iS \]
我们的答案为\((A^nS)[0,0]\),注意\(A\)的特征,可以发现,
\[ (A^nS)[0,0]=\sum_{i=0}^{k-1} c[i](A^iS)[0,0]=\sum_{i=0}^{k-1}c[i]S[i,0] \]
所以只要构造出\(c​\),我们就能\(O(k)​\)地完成答案的计算。所以\(c​\)的构造才是重点啊

\(G(A)\)是一个以矩阵为参数的\(k\)次多项式,并且\(G(A)=0\),那么
\[ A^n=P(A)G(A)+Q(A)=P(A)G(A)+\sum_{i=0}^{k-1}c[i](A^i)=\sum_{i=0}^{k-1}c[i]A^i \]
所以序列\(c\)就是\(A^n\bmod G(A)\)的系数。所以\(G(A)\)的构造才是重点啊

更强duliu的魔法

上接,若等式\((\lambda I-A)V=0​\)成立,称\(\lambda​\)\(A​\)的特征值,\(V​\)为特征向量,有如下结论

  1. \(\det(A)\not=0\),则\(A\)\(k\)组线性无关的特征向量
  2. \(\det(\lambda I-A)=0\)是等式种\(V\)存在的充要条件(\(p(\lambda)=\det(\lambda I-A)\)\(A\)的特征多项式)

Cayley-Hamilton theorem

\(\det(A)\not=0\),则\(\prod_{t}(\lambda[t]I-A)=0\)\(\lambda[t]\)是第\(t​\)个特征值。

肉眼可见对于转移矩阵\(A​\)满足\(\det(A)=(-1)^{k-1}a[k]\not=0​\),所以\(G(x)=\prod_{t}(\lambda[t]I-A)​\)

然而还是还是不会

结论多项式\(p(\lambda)\)与多项式\(\prod_{t}(\lambda[t]I-A)\)的系数一样。

所以求出\(p(\lambda)​\)的系数就好了,手玩可得
\[ p(\lambda)=\lambda^k-\sum_{i=1}^ka[i]\lambda^{k-i} \]
为什么我手玩的\(p(\lambda)\)没有系数\((-1)^k\)呢?

所以,得到\(p(\lambda)​\)的系数构造出\(G(A)​\)再得到\(A^n\bmod G(A)​\),然后获取答案就行了。

取模的那部分是快速幂套多项式取模,所以总的时间复杂度为\(O(k\log k\log n)​\)

魔法的copy实现

暂时留坑 题目传送门

猜你喜欢

转载自www.cnblogs.com/nosta/p/10430212.html