此博客是抄论文的,你可以认为是转载的
1.线性递推数列
有限数列显然是线性递推数列。
无限数列ai设其生成函数为A(x)
那么如果A(x)能被表示为B(x)C(x)的形式,其中B(x)[x0]=1,则A(x)是线性递推数列。
常数项为1是因为递推式你要让∑j=0bjai−j=0来递推出ai所以常数项需要为1。
能这样表示是因为线性递推实质上就是A(x)B(x)=C(x),其中B(x)是我们的线性递推式。
对于一个线性递推数列ai,假设他前i项的最短递推式是R(i),长度为li,那么如果R(i−1)不是前i项的最短递推式,那么有li≥max(li−1,i+1−li−1),且这个等号是可以通过构造取到的。
首先li≥li−1显然,如果li≤i−li−1的话:

实在不知道怎么用语言表示交换和号。
也就是说如果li≤i−li−1那么原来的递推式必可以继续用。
接下来我们给出在R(i−1)不是前i项的递推式时li=max(li−1,i+1−li−1)的构造方案,也就是BM算法。

也就是说每次增长递推式,我们都可以用这个方法使得增长时li=i+1−li−1,不增长时li=li−1。
因为上文证明了li≥max(li−1,i+1−li−1),所以这个算法对于有限长度的数列求出的递推式一定是最短的。
对于无限长的数列,

所以我们只需要取最短递推式长度的两倍即可。
边界情况:第一次增长递推式的时候,ai应该是第一个非0元素,那么li=i个0即为前i个数的最短递推式,也就是根本没有递推,同时也满足li≥i+1−li−1,(li−1=0)。
线性递推求第n项:

向量序列的最短递推式:

矩阵的零化多项式:使得矩阵M:
f(M)=∑i=0naiMi=0
矩阵的最小多项式:
零化多项式中次数最低的多项式。
如何求矩阵的最小多项式:
直接求I,M,M2...的最短递推式即可,对于稀疏矩阵可以做到O(n(n+e))。





