线性递推数列和整式递推数列

本文大量参考了:

  • 国家集训队2019论文集,钟子谦,两类递推数列的性质和应用

线性递推数列

基本性质和判定方法

一些定义:

  • 对于无限数列 { a 0 , a 1 , ⋯   } \{a_0,a_1,\cdots\} {a0,a1,} 和有限非空数列 { r 0 = 1 , r 1 , ⋯   , r m − 1 } \{r_0=1,r_1,\cdots,r_{m-1}\} {r0=1,r1,,rm1},若对于任意 p ≥ m − 1 p\geq m-1 pm1,有 ∑ k = 0 m − 1 a p − k r k = 0 \sum_{k=0}^{m-1}a_{p-k}r_k=0 k=0m1apkrk=0,则称数列 r r r 为数列 a a a线性递推式

    对于有限数列 { a 0 , a 1 , ⋯   , a n − 1 } \{a_0,a_1,\cdots,a_{n-1}\} {a0,a1,,an1} 和有限非空数列 { r 0 = 1 , r 1 , ⋯   , r m − 1 } \{r_0=1,r_1,\cdots,r_{m-1}\} {r0=1,r1,,rm1},若对于任意 m − 1 ≤ p ≤ n − 1 m-1\leq p\leq n-1 m1pn1,有 ∑ k = 0 m − 1 a p − k r k = 0 \sum_{k=0}^{m-1}a_{p-k}r_k=0 k=0m1apkrk=0,则称数列 r r r 为数列 a a a线性递推式

  • 称存在线性递推式的无限数列为线性递推数列(有限数列一定存在线性递推式)。

  • 称线性递推式 { r 0 , r 1 , ⋯   , r m − 1 } \{r_0,r_1,\cdots,r_{m-1}\} {r0,r1,,rm1}阶数为它的长度减 1 1 1(即 m − 1 m-1 m1),称数列 a a a 的阶数最小的线性递推式为数列 a a a最短线性递推式

用生成函数的观点看线性递推式,我们将有如下结论:

  • 定理 1:对于无限数列 { a 0 , a 1 , ⋯   } \{a_0,a_1,\cdots\} {a0,a1,} 和有限非空数列 { r 0 = 1 , r 1 , ⋯   , r m − 1 } \{r_0=1,r_1,\cdots,r_{m-1}\} {r0=1,r1,,rm1},设它们的生成函数分别为 A , R A,R A,R,那么数列 r r r 为数列 a a a 的线性递推式等价于存在次数不超过 m − 2 m-2 m2 的多项式 S S S 满足 A R + S = 0 AR+S=0 AR+S=0

    对于有限数列 { a 0 , a 1 , ⋯   , a n − 1 } \{a_0,a_1,\cdots,a_{n-1}\} {a0,a1,,an1} 的情况,要满足的条件变为 A R + S ≡ 0 ( m o d x n ) AR+S\equiv 0\pmod{x^{n}} AR+S0(modxn) 即可。

    证明:考虑无限序列的情况,按照定义,对于 k ≥ m − 1 k\geq m-1 km1 我们肯定有 [ x k ] ( A R ) = 0 [x^k](AR)=0 [xk](AR)=0,那么只需要取适当的 S S S 使得低次项系数为 0 0 0 即可。

    推论 1:对于无限数列 { a 0 , a 1 , ⋯   } \{a_0,a_1,\cdots\} {a0,a1,} 及其生成函数 A A A a a a 为线性递推数列当且仅当存在存在常数项为 1 1 1 的多项式 R R R S S S 满足 A = S R A=\frac{S}{R} A=RS。此时对应的线性递推式的阶数为 max ⁡ ( deg ⁡ ( R ) , deg ⁡ ( S ) + 1 ) \max(\deg(R),\deg(S)+1) max(deg(R),deg(S)+1)

    证明:由定理1移项得到。

  • 定理 2:对于一个 n × n n\times n n×n 的矩阵 M M M,无限数列 { I , M , M 2 , ⋯   } \{I,M,M^2,\cdots\} {I,M,M2,} 是一个线性递推数列,它的最短线性递推式阶数不超过 n n n

    证明:考虑矩阵 M M M 的特征多项式 p ( λ ) = ∣ λ I − M ∣ p(\lambda)=|\lambda I-M| p(λ)=λIM,其次数为 n n n n n n 次项恰好为 1 1 1。由 Cayley-Hamilton 定理可知 p ( M ) = 0 p(M)=0 p(M)=0

    p ( λ ) = ∑ i = 0 n c i λ n − i p(\lambda)=\sum_{i=0}^nc_{i}\lambda^{n-i} p(λ)=i=0nciλni,那么就有 ∑ i = 0 n c i M n − i = 0 \sum_{i=0}^nc_iM^{n-i}=0 i=0nciMni=0。那么即可对任意 j ≥ n j\geq n jn 推出 ∑ i = 0 n c i M j − i = 0 \sum_{i=0}^nc_iM^{j-i}=0 i=0nciMji=0

    于是 { c 0 , ⋯   , c n } \{c_0,\cdots,c_n\} {c0,,cn} 即为一个合法的阶数为 n n n 的线性递推式。

线性递推数列还满足以下的封闭性:

  • 定理 3:对于线性递推数列 { a 0 , a 1 , ⋯   } , { b 0 , b 1 , ⋯   } \{a_0,a_1,\cdots\},\{b_0,b_1,\cdots\} {a0,a1,},{b0,b1,},我们有:
    • { a i + b i } i = 0 ∞ \{a_i+b_i\}_{i=0}^{\infty} {ai+bi}i=0 为线性递推数列。
    • { ∑ j = 0 i a j b i − j } i = 0 ∞ \{\sum_{j=0}^ia_jb_{i-j}\}_{i=0}^{\infty} {j=0iajbij}i=0 为线性递推数列。
    • { a i b i } i = 0 ∞ \{a_ib_i\}_{i=0}^{\infty} {aibi}i=0 为线性递推数列。

前两者的证明都较为简单,直接按推论1设 A = S 1 R 1 , B = S 2 R 2 A=\frac{S_1}{R_1},B=\frac{S_2}{R_2} A=R1S1,B=R2S2 即可。对于最后一者,可以从特征根的角度证明。

求一个数列的最短线性递推式

Berlekamp-Massey 算法。

先考虑有限数列 { a 0 , ⋯   , a n } \{a_0,\cdots,a_n\} {a0,,an} 的情况。我们会求出其每个前缀 { a 0 , ⋯   , a i } \{a_0,\cdots,a_i\} {a0,,ai} 的最短线性递推式 r ( i ) r^{(i)} r(i)(设 l i l_i li r ( i ) r^{(i)} r(i) 的阶数)。首先显然有 l i − 1 ≤ l i l_{i-1}\leq l_i li1li

  • 引理 1:如果 r ( i − 1 ) r^{(i-1)} r(i1) 不是 { a 0 , ⋯   , a i } \{a_0,\cdots,a_i\} {a0,,ai} 的最短线性递推式,那么:

    l i ≥ max ⁡ ( l i − 1 , i − l i − 1 + 1 ) l_i\geq \max(l_{i-1},i-l_{i-1}+1) limax(li1,ili1+1)

    证明:显然只需证 l i ≥ i − l i − 1 + 1 l_i\geq i-l_{i-1}+1 liili1+1

    反证法。假设 l i ≤ i − l i − 1 l_i\leq i-l_{i-1} liili1,设 r ( i − 1 ) = { p 0 , ⋯   , p l i − 1 } r^{(i-1)}=\{p_0,\cdots,p_{l_{i-1}}\} r(i1)={p0,,pli1} r ( i ) = { q 0 , ⋯   , q l i } r^{(i)}=\{q_0,\cdots,q_{l_i}\} r(i)={q0,,qli}。那么:

    − ∑ j = 1 l i − 1 p j a i − j = ∑ s = 2 l i − 1 + l i a i − s ∑ j p j q s − j = − ∑ j = 1 l i q j a i − j = a i -\sum_{j=1}^{l_{i-1}}p_ja_{i-j}=\sum_{s=2}^{l_{i-1}+l_i}a_{i-s}\sum_{j}p_jq_{s-j}=-\sum_{j=1}^{l_i}q_ja_{i-j}=a_i j=1li1pjaij=s=2li1+liaisjpjqsj=j=1liqjaij=ai

    中间那一步用到了 i − ( l i − 1 + l i ) ≥ 0 i-(l_{i-1}+l_i)\geq 0 i(li1+li)0

    所以 r ( i − 1 ) r^{(i-1)} r(i1) 也为 { a 0 , ⋯   , a i } \{a_0,\cdots,a_i\} {a0,,ai} 的线性递推式,显然它就是最短的,矛盾。

由此我们证明了 l i l_i li 的下界, 而 Berlekamp-Massey 算法给出了取到下界的方案。

A A A 为数列 a a a 的生成函数, R ( i ) R^{(i)} R(i) 为数列 r ( i ) r^{(i)} r(i) 的生成函数,那么根据定理1可知存在多项式 S ( i ) S^{(i)} S(i) 使得 A R ( i ) ≡ S ( i ) ( m o d x i + 1 ) AR^{(i)}\equiv S^{(i)}\pmod{x^{i+1}} AR(i)S(i)(modxi+1),其中 deg ⁡ ( S ( i ) ) ≤ l i − 1 \deg(S^{(i)})\leq l_i-1 deg(S(i))li1

考虑由 R ( i − 1 ) R^{(i-1)} R(i1) 推到 R ( i ) R^{(i)} R(i)

  • 如果我们仍然有 A R ( i − 1 ) ≡ S ( i − 1 ) ( m o d x i + 1 ) AR^{(i-1)}\equiv S^{(i-1)}\pmod{x^{i+1}} AR(i1)S(i1)(modxi+1),那么令 R ( i ) ← R ( i − 1 ) R^{(i)}\gets R^{(i-1)} R(i)R(i1) 即可。

  • 否则,设 A R ( i − 1 ) − S ( i − 1 ) ≡ d x i ( m o d x i + 1 ) AR^{(i-1)}-S^{(i-1)}\equiv dx^i\pmod{x^{i+1}} AR(i1)S(i1)dxi(modxi+1)。我们考虑上一次增长递推式的情形,设当时存在 p < i pp<i c c c 使得 A R ( p − 1 ) − S ( p − 1 ) = c x p ( m o d x p + 1 ) AR^{(p-1)}-S^{(p-1)}=cx^p\pmod{x^{p+1}} AR(p1)S(p1)=cxp(modxp+1),那么我们就有:

    A R ( i − 1 ) − S ( i − 1 ) ≡ d x i ( m o d x i + 1 ) A R ( p − 1 ) − S ( p − 1 ) ≡ c x p ( m o d x p + 1 ) \begin{aligned}AR^{(i-1)}-S^{(i-1)}&\equiv dx^i\pmod{x^{i+1}}\\AR^{(p-1)}-S^{(p-1)}&\equiv cx^p\pmod{x^{p+1}}\end{aligned} AR(i1)S(i1)AR(p1)S(p1)dxi(modxi+1)cxp(modxp+1)

    将下式乘上 t ⋅ x i − p t\cdot x^{i-p} txip(其中 t = d c t=\frac{d}{c} t=cd,注意 c , d c,d c,d 均不可能等于 0 0 0),再将两式相减,即可得到:

    A ( R ( i − 1 ) − t x i − p R ( p − 1 ) ) − ( S ( i − 1 ) − t x i − p S ( p − 1 ) ) ≡ 0 ( m o d x i + 1 ) A(R^{(i-1)}-tx^{i-p}R^{(p-1)})-(S^{(i-1)}-tx^{i-p}S^{(p-1)})\equiv 0\pmod{x^{i+1}} A(R(i1)txipR(p1))(S(i1)txipS(p1))0(modxi+1)

    R ( i ) = R ( i − 1 ) − t x i − p R ( p − 1 ) R^{(i)}=R^{(i-1)}-tx^{i-p}R^{(p-1)} R(i)=R(i1)txipR(p1) 即可。

    放在现实意义中的阿巴阿巴:考虑 r ( p − 1 ) r^{(p-1)} r(p1),它满足对于 j < p j

    j<p 都是成立的,但 j = p j=p j=p 时会多算出一些东西。我们利用这个性质,对 r ( p − 1 ) r^{(p-1)} r(p1) 进行适当的修改、放缩、补零,即可得到一个对于 j < i jj<i 取值都是 0 0 0、对于 j = i j=i j=i 取值恰好为 d d d 的递推式。然后再用 r ( i − 1 ) r^{(i-1)} r(i1) 和这个递推式相减即可消去第 i i i 位的多余部分。

    然后可以归纳证明这样得到的 l i l_i li 一定满足 l i = max ⁡ ( l i − 1 , i − l i − 1 + 1 ) l_i=\max(l_{i-1},i-l_{i-1}+1) li=max(li1,ili1+1)。由于 p p p 是最近的一次增长递推式的时候,所以我们有 l i − 1 = l p = p − l p − 1 + 1 l_{i-1}=l_p=p-l_{p-1}+1 li1=lp=plp1+1,那么:

    l i = max ⁡ ( l i − 1 , ( i − p ) + l p − 1 ) = max ⁡ ( l i − 1 , ( i − p ) + ( p − l p + 1 ) ) = max ⁡ ( l i − 1 , i − l p + 1 ) l_i=\max(l_{i-1},(i-p)+l_{p-1})=\max(l_{i-1},(i-p)+(p-l_p+1))=\max(l_{i-1},i-l_p+1) li=max(li1,(ip)+lp1)=max(li1,(ip)+(plp+1))=max(li1,ilp+1)

    即证。

那么我们只要枚举 i i i 并按照上述算法计算 r ( i ) r^{(i)} r(i) l i l_i li 即可,注意 l i > l i − 1 l_i>l_{i-1} li>li1 时需要对 p , c p,c p,c 进行更新。时间复杂度 O ( n 2 ) O(n^2) O(n2)

对于无限数列的情况,我们有如下定理:

  • 定理 4:对于线性递推数列 { a 0 , a 1 , ⋯   } \{a_0,a_1,\cdots\} {a0,a1,},若它的最短线性递推式阶数不超过 s s s,那么 { a 0 , ⋯   , a 2 s − 1 } \{a_0,\cdots,a_{2s-1}\} {a0,,a2s1} 的最短线性递推式即为 a a a 的最短线性递推式。

    证明:设 { a 0 , a 1 , ⋯   } \{a_0,a_1,\cdots\} {a0,a1,} 的最短线性递推式阶数为 q q q { a 0 , ⋯   , a 2 s − 1 } \{a_0,\cdots,a_{2s-1}\} {a0,,a2s1} 的最短线性递推式阶数为 p p p,那么必定有 p ≤ q p\leq q pq p + q ≤ 2 s p+q\leq 2s p+q2s。接下来的证明就和引理1的证明类似了。

所以如果我们知道数列 a a a 最短线性递推式阶数的上界 s s s,我们只需要求出这个数列长度为 2 s 2s 2s 的前缀并求出它的最短线性递推式即可。

求一个矩阵序列的最短线性递推式

这里需要假设运算均在模某个大质数 p p p 下进行。

对于 n n n m m m 列的矩阵序列 { t 0 , t 1 , ⋯   } \{t_0,t_1,\cdots\} {t0,t1,},考虑在模 p p p 意义下随机一个 n n n 维行向量 u u u 和一个 m m m 维列向量 v v v,然后计算标量序列 { u t 0 v , u t 1 v , ⋯   } \{ut_0v,ut_1v,\cdots\} {ut0v,ut1v,} 的最短线性递推式。

根据一个我不会证的定理,它们的最短线性递推式相同的概率为 1 − n + m p 1-\frac{n+m}{p} 1pn+m,即单次错误的概率为 n + m p \frac{n+m}{p} pn+m

求矩阵的最小多项式

n × n n\times n n×n 的矩阵 M M M 的最小多项式为次数最小的使得 f ( M ) = 0 f(M)=0 f(M)=0 的多项式 f f f

f ( x ) = ∑ i = 0 m c i x m − i f(x)=\sum_{i=0}^{m}c_ix^{m-i} f(x)=i=0mcixmi。类似于定理2的证明,我们知道 M M M 的零化多项式 f f f 对应着无限数列 { I , M , M 2 , ⋯   } \{I,M,M^2,\cdots\} {I,M,M2,} 的一个线性递推式。

所以矩阵 M M M 的最小多项式对应着无限数列 { I , M , M 2 , ⋯   } \{I,M,M^2,\cdots\} {I,M,M2,} 的最短线性递推式。

根据定理2,再套用前两节的做法,我们需要先计算出 { I , u M v , ⋯   , u M 2 n − 1 v } \{I,uMv,\cdots,uM^{2n-1}v\} {I,uMv,,uM2n1v}。使用递推计算,过程中是向量乘矩阵,单次乘法为 O ( n 2 ) O(n^2) O(n2),总时间复杂度 O ( n 3 ) O(n^3) O(n3)

整式递推数列

这个比较难,就只有最基础的一点东西(

基本性质和判定方法

一些定义:

  • 对于无限数列 { a 0 , a 1 , ⋯   } \{a_0,a_1,\cdots\} {a0,a1,} 和有限非空多项式数列 { P 0 , P 1 , ⋯   , P m − 1 } \{P_0,P_1,\cdots,P_{m-1}\} {P0,P1,,Pm1},若 P 0 P_0 P0 非零且对于任意 p ≥ m − 1 p\geq m-1 pm1,有 ∑ k = 0 m − 1 a p − k P k ( p ) = 0 \sum_{k=0}^{m-1}a_{p-k}P_k(p)=0 k=0m1apkPk(p)=0,则称数列 P P P 为数列 a a a整式递推式

    对于有限数列 { a 0 , a 1 , ⋯   , a n − 1 } \{a_0,a_1,\cdots,a_{n-1}\} {a0,a1,,an1} 和有限非空多项式数列 { P 0 , P 1 , ⋯   , P m − 1 } \{P_0,P_1,\cdots,P_{m-1}\} {P0,P1,,Pm1},若 P 0 P_0 P0 非零且对于任意 m − 1 ≤ p ≤ n − 1 m-1\leq p\leq n-1 m1pn1,有 ∑ k = 0 m − 1 a p − k P k ( p ) = 0 \sum_{k=0}^{m-1}a_{p-k}P_k(p)=0 k=0m1apkPk(p)=0,则称数列 P P P 为数列 a a a整式递推式

  • 称存在整式递推式的无限数列为整式递推数列(有限数列一定存在整式递推式)。

  • 称整式递推式 { P 0 , P 1 , ⋯   , P m − 1 } \{P_0,P_1,\cdots,P_{m-1}\} {P0,P1,,Pm1}阶数为它的长度减 1 1 1(即 m − 1 m-1 m1),次数 max ⁡ i deg ⁡ ( P i ) \max_i\deg(P_i) maxideg(Pi)

容易看出线性递推数列也是整式递推数列。

接下来给出整式递推数列最基本的判定方法:

  • 称形式幂级数 A ( x ) A(x) A(x)微分有限的,当且仅当存在多项式 Q 0 ( x ) , ⋯   , Q m − 1 ( x ) Q_0(x),\cdots,Q_{m-1}(x) Q0(x),,Qm1(x) 满足 Q m − 1 ( x ) ≠ 0 Q_{m-1}(x)\neq 0 Qm1(x)=0 ∑ i = 0 m − 1 Q i ( x ) A ( i ) ( x ) = 0 \sum_{i=0}^{m-1}Q_i(x)A^{(i)}(x)=0 i=0m1Qi(x)A(i)(x)=0

  • 定理 5:对于无限数列 { a 0 , a 1 , ⋯   } \{a_0,a_1,\cdots\} {a0,a1,} 及其生成函数 A A A a a a 为整式递推数列当且仅当 A A A 是微分有限的。

    证明:对于必要性,这里直接给出一种明了的构造方式:

    { P 0 , ⋯   , P m − 1 } \{P_0,\cdots,P_{m-1}\} {P0,,Pm1} a a a 的整式递推式(满足 ∀ n ≥ m − 1 , ∑ k = 0 m − 1 a n − k P k ( n ) = 0 \forall n\geq m-1,\sum_{k=0}^{m-1}a_{n-k}P_k(n)=0 nm1,k=0m1ankPk(n)=0)。设 D = max ⁡ i deg ⁡ ( P i ) D=\max_i\deg (P_i) D=maxideg(Pi)

    A i ( x ) = x i A ( i ) ( x ) A_i(x)=x^iA^{(i)}(x) Ai(x)=xiA(i)(x) 0 ≤ i ≤ D 0\leq i\leq D 0iD)。

    那么对于任意 n ≥ D n\geq D nD [ x n ] A i ( x ) = f i ( n ) a n [x^n]A_i(x)=f_i(n)a_n [xn]Ai(x)=fi(n)an,其中 f i ( n ) f_i(n) fi(n) 是关于 n n n i i i 次多项式(具体来说是一个下降幂的形式,不过这不重要)。

    那么,当 n ≥ D + m − 1 n\geq D+m-1 nD+m1 时:

    [ x n ] ∑ i = 0 D Q i ′ ( x ) x i A ( i ) ( x ) = ∑ k = 0 m − 1 ∑ i = 0 D ( [ x k ] Q i ′ ( x ) ) ( [ x n − k ] A i ( x ) ) = ∑ k = 0 m − 1 ∑ i = 0 D q i , k ′ f i ( n − k ) a n − k = ∑ k = 0 m − 1 a n − k ∑ i = 0 D q i , k ′ f i ( n − k ) = ∑ k = 0 m − 1 a n − k ∑ i = 0 D q i , k ′ f i ′ ( n ) \begin{aligned}&[x^n]\sum_{i=0}^{D}Q'_i(x)x^iA^{(i)}(x)\\=&\sum_{k=0}^{m-1}\sum_{i=0}^D\bigg([x^k]Q'_i(x)\bigg)\bigg([x^{n-k}]A_i(x)\bigg)\\=&\sum_{k=0}^{m-1}\sum_{i=0}^Dq'_{i,k}f_i(n-k)a_{n-k}\\=&\sum_{k=0}^{m-1}a_{n-k}\sum_{i=0}^Dq'_{i,k}f_i(n-k)\\=&\sum_{k=0}^{m-1}a_{n-k}\sum_{i=0}^Dq'_{i,k}f'_i(n)\\\end{aligned} ====[xn]i=0DQi(x)xiA(i)(x)k=0m1i=0D([xk]Qi(x))([xnk]Ai(x))k=0m1i=0Dqi,kfi(nk)ankk=0m1anki=0Dqi,kfi(nk)k=0m1anki=0Dqi,kfi(n)

    由于 f i ′ ( n ) f_i'(n) fi(n) 为关于 n n n i i i 次多项式,所以 { f 0 ′ ( n ) , ⋯   , f D ′ ( n ) } \{f_0'(n),\cdots,f_D'(n)\} {f0(n),,fD(n)} 线性组合张成的空间包含了所有关于 n n n 的次数不超过 D D D 的多项式,那么我们选取合适的 q i , k ′ q'_{i,k} qi,k 使得 ∑ i = 0 D q i , k ′ f i ′ ( n ) = P k ( n ) \sum_{i=0}^Dq'_{i,k}f'_i(n)=P_k(n) i=0Dqi,kfi(n)=Pk(n) 即可。

    再令 Q i ( x ) = Q i ′ ( x ) x i Q_i(x)=Q_i'(x)x^i Qi(x)=Qi(x)xi,于是对于任意 n ≥ D + m − 1 n\geq D+m-1 nD+m1 [ x n ] ∑ i = 0 D Q i ( x ) A ( i ) ( x ) = ∑ k = 0 m − 1 a n − k P k ( n ) = 0 [x^n]\sum_{i=0}^DQ_i(x)A^{(i)}(x)=\sum_{k=0}^{m-1}a_{n-k}P_k(n)=0 [xn]i=0DQi(x)A(i)(x)=k=0m1ankPk(n)=0

    上述过程建议画图推导。

    那么现在我们已经构造出一组 Q i ( x ) Q_i(x) Qi(x) 满足 ∑ i = 0 D Q i ( x ) A ( i ) ( x ) = S ( x ) \sum_{i=0}^DQ_i(x)A^{(i)}(x)=S(x) i=0DQi(x)A(i)(x)=S(x),其中 S ( x ) S(x) S(x) 为一有限次多项式。

    再对等式两边同时求 deg ⁡ ( S ( x ) ) + 1 \deg (S(x))+1 deg(S(x))+1 阶导,即可证明 A A A 是微分有限的。

    至于充分性,直接将 ∑ i = 0 m − 1 Q i ( x ) A ( i ) ( x ) = 0 \sum_{i=0}^{m-1}Q_i(x)A^{(i)}(x)=0 i=0m1Qi(x)A(i)(x)=0 展开,然后对于充分大的 n n n,取左式的 n n n 次项系数即可得到一个 a a a 的整式递推式。

你可能感兴趣的:(算法,数学,数论,。)