两类递推数列

此博客是抄论文的,你可以认为是转载的

1.线性递推数列

有限数列显然是线性递推数列。
无限数列aia_i设其生成函数为A(x)A(x)
那么如果A(x)A(x)能被表示为C(x)B(x)\frac {C(x)}{B(x)}的形式,其中B(x)[x0]=1B(x)[x^0] = 1,则A(x)A(x)是线性递推数列。
常数项为11是因为递推式你要让j=0bjaij=0\sum_{j=0}b_ja_{i-j} = 0来递推出aia_i所以常数项需要为11
能这样表示是因为线性递推实质上就是A(x)B(x)=C(x)A(x)B(x) = C(x),其中B(x)B(x)是我们的线性递推式。

对于一个线性递推数列aia_i,假设他前ii项的最短递推式是R(i)R^{(i)},长度为lil_i,那么如果R(i1)R^{(i-1)}不是前ii项的最短递推式,那么有limax(li1,i+1li1)l_i \geq \max(l_{i-1},i+1-l_{i-1}),且这个等号是可以通过构造取到的。
首先lili1l_i \geq l_{i-1}显然,如果liili1l_i \leq i-l_{i-1}的话:
两类递推数列
实在不知道怎么用语言表示交换和号。
也就是说如果liili1l_i \leq i-l_{i-1}那么原来的递推式必可以继续用。

接下来我们给出在R(i1)R^{(i-1)}不是前ii项的递推式时li=max(li1,i+1li1)l_i = \max(l_{i-1},i+1-l_{i-1})的构造方案,也就是BMBM算法。
两类递推数列
也就是说每次增长递推式,我们都可以用这个方法使得增长时li=i+1li1l_i = i+1-l_{i-1},不增长时li=li1l_i = l_{i-1}
因为上文证明了limax(li1,i+1li1)l_i \geq \max(l_{i-1},i+1-l_{i-1}),所以这个算法对于有限长度的数列求出的递推式一定是最短的。

对于无限长的数列,
两类递推数列
所以我们只需要取最短递推式长度的两倍即可。
边界情况:第一次增长递推式的时候,aia_i应该是第一个非00元素,那么li=il_i = i00即为前ii个数的最短递推式,也就是根本没有递推,同时也满足lii+1li1,(li1=0)l_i \geq i+1-l_{i-1},(l_{i-1}=0)

线性递推求第nn项:
两类递推数列
向量序列的最短递推式:
两类递推数列

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

两类递推数列
两类递推数列
两类递推数列
两类递推数列

2.整式递推数列