常系数齐次线性递推式第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)\)的构造才是重点啊
更强du力liu的魔法
上接,若等式\((\lambda I-A)V=0?\)成立,称\(\lambda?\)为\(A?\)的特征值,\(V?\)为特征向量,有如下结论
- 若\(\det(A)\not=0\),则\(A\)有\(k\)组线性无关的特征向量
- \(\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\)个特征值。
一个很假的证明
显然,上边这个多项式也是一个\(k\)阶方阵,而且\((\lambda[t]I-A)\)部分具有交换律,进而右乘任意特征向量为0。此时\(A\)有\(k\)个线性无关的特征向量,所以任一个\(k\)维向量能以\(k?\)个特征向量为基被分解,整体被右乘=分解后的被右乘求和=0。
换言之,该方阵右乘任一个向量为0,则这个方阵为0。
肉眼可见对于转移矩阵\(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实现
暂时留坑 题目传送门
原文地址:https://www.cnblogs.com/nosta/p/10430212.html