线性递推数列_学习笔记

前置知识:线代基础(越多越好

发现了一位老哥写的笔记,精炼得相当到位 (这是博客地址嗷)


线性递推数列

基本性质

定理1.1.

对于无限数列 { a 0 , a 1 , a 2 . . . } \{a_0, a_1, a_2 ...\} {a0,a1,a2...} 和有限非空数列 { r 0 , r 1 , r 2 . . . r m − 1 } \{r_0,r_1,r_2 ...r_{m−1}\} {r0,r1,r2...rm1},设数列 a a a 和数列 r r r 所对应的生成函数为 A A A R R 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

定理1.2.

对于一个 n × n n × n n×n 的矩阵 M M M,无限数列 I , M , M 2 , M 3 ⋅ ⋅ ⋅ {I, M, M^2 , M^3 · · · } I,M,M2,M3 是一个线性递推数列,它的最短线性递推式阶数不超过 n n n

定理1.3.

由于太占篇幅了所以就略了。

定理1.4.

对于线性递推数列 a 0 , a 1 , a 2 . . . {a_0, a_1, a_2...} a0,a1,a2...,若它的最短线性递推式阶数不超过 s s s,那么 a 0 , a 1 , a 2 . . . a s + s − 1 {a_0, a_1, a_2 ...a_{s+s−1}} a0,a1,a2...as+s1 的最短线性递推式即为 a 的最短线性递推式。

求数列的最小线性递推式,BM算法

zzq的博客 Berlekamp-Massey算法简单介绍

常见应用

求向量列、矩阵列最小线性递推式

考虑求 n n n 维行向量列 { t 0 , t 1 , t 2 . . . } \{t_0, t_1, t_2...\} {t0,t1,t2...} 的线性递推式。假设考虑在模 p p p 意义下随机 一个 n n n 维列向量 v v v,转而计算 { t 0 v , t 1 v , t 2 v . . . } \{t_0v, t_1v, t_2v...\} {t0v,t1v,t2v...} 这个标量序列的最短线性递推式。根据SchwartzZippel引理,正确率至少为 p − n n \frac{p-n}{n} npn 。列向量同理。
对于大小为 n × m n\times m n×m 的矩阵就先乘以一个长度为 m m m 的随机的列向量,转而成为求向量列递推式即可。

求矩阵最小多项式

n × n n\times n n×n 的矩阵 M M M 的最小多项式是次数最小使得 f ( M ) = 0 f(M)=0 f(M)=0 的多项式 f f f
对于方阵 M M M ,其最小多项式即为矩阵列 I , M , M 2 . . . I,M,M^2... I,M,M2... 的最短线性递推式,直接求解即可。时间复杂度 O ( n 3 ) O(n^3) O(n3) 。若矩阵中有 e e e 个非 0 0 0 位置,则时间复杂度可降为 O ( n ( n + e ) ) O(n(n+e)) O(n(n+e))

优化动态规划

已知一个递推式 f ( i , j ) = ∑ t = 0 m − 1 f ( i − 1 , t ) c ( t , j ) f(i,j)=\sum_{t=0}^{m-1}f(i-1,t)c(t,j) f(i,j)=t=0m1f(i1,t)c(t,j) ,需要求出 f ( n , j ) , j ∈ [ 0 , m ) f(n,j),j\in[0,m) f(n,j),j[0,m) 。记 F ( i ) F(i) F(i) f ( i , j ) ( j ∈ [ 0 , m ) ) f(i,j)(j\in[0,m)) f(i,j)(j[0,m)) 的行向量, C C C c c c 对应的矩阵,则 F ( n ) = F ( 0 ) C n F(n)=F(0)C^n F(n)=F(0)Cn 。所以 F ( 0 ) , F ( 1 ) . . . F ( n ) {F(0),F(1)...F(n)} F(0),F(1)...F(n) 是线性递推数列,用求线性递推数列的某一项的方法求出即可。时间复杂度 O ( m 3 + m log ⁡ ( m ) log ⁡ ( n ) ) O(m^3+m\log(m)\log(n)) O(m3+mlog(m)log(n)) ,比直接矩阵快速幂只少了一个 log ⁡ \log log ,所以十分没用。

解稀疏线性方程组

有一个 n × n n × n n×n 的满秩矩阵 A A A 和一个长度为 n n n 的行向量 b b b,我们需要求出一个长度为 n n n 的行向量 x x x 满足 A x = b Ax = b Ax=b,即 x = A − 1 b x=A^{-1}b x=A1b
b , A b , A 2 b . . . b,Ab,A^2b... b,Ab,A2b... 的最短线性递推式为 r 0 . . . r m r_0...r_m r0...rm ,有 ∑ i = 0 m A i b r m − i = 0 \sum_{i=0}^mA^ibr_{m-i}=0 i=0mAibrmi=0 ,两遍同时左乘 A − 1 A^{-1} A1,再移项可得 A − 1 b = − 1 r m ∑ i = 0 m − 1 A i b r m − i − 1 A^{-1}b=-\frac{1}{r_m}\sum_{i=0}^{m-1}A^ibr_{m-i-1} A1b=rm1i=0m1Aibrmi1。若 A A A 中有 e e e 个非 0 0 0 位置,则时间复杂度为 O ( n ( n + e ) ) O(n(n+e)) O(n(n+e))

求稀疏矩阵行列式

已知一个大小大小为 n × n n\times n n×n 的满秩矩阵 A A A,求 d e t ( A ) det(A) det(A) p p p 取模的值。
随机一个大小和 A A A 相等对角矩阵 B B B ,至少有 1 − 2 n 2 − n p 1-\frac{2n^2-n}{p} 1p2n2n 的概率 A B AB AB 的最小多项式就是其特征多项式,又因为特征多项式的常数等于行列式乘以 ( − 1 ) n (-1)^n (1)n ,所以我们就能求出 d e t ( A B ) det(AB) det(AB) ,最后 d e t ( A ) = d e t ( A B ) d e t ( B ) det(A)=\frac{det(AB)}{det(B)} det(A)=det(B)det(AB) 。若 A A A 中有 e e e 个非 0 0 0 位置,则时间复杂度为 O ( n ( n + e ) ) O(n(n+e)) O(n(n+e))

posted @ 2022-10-10 20:18  缙云山车神  阅读(110)  评论(0编辑  收藏  举报