码迷,mamicode.com
首页 > 其他好文 > 详细

常系数齐次线性递推初探

时间:2019-02-25 13:19:06      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:获取   实现   答案   时间复杂度   display   \n   lin   str   线性   

常系数齐次线性递推式第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\)个特征值。

一个很假的证明

显然,上边这个多项式也是一个\(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实现

暂时留坑 题目传送门

常系数齐次线性递推初探

标签:获取   实现   答案   时间复杂度   display   \n   lin   str   线性   

原文地址:https://www.cnblogs.com/nosta/p/10430212.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!