线性递推数列_学习笔记
前置知识:线代基础(越多越好
发现了一位老哥写的笔记,精炼得相当到位 (这是博客地址嗷) 。
线性递推数列
基本性质
定理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...rm−1},设数列 a a a 和数列 r r r 所对应的生成函数为 A A A 和 R R R,数列 r r r 为数列 a a a 的线性递归式等价于存在次数不超过 m − 2 m−2 m−2 的多项式 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+s−1 的最短线性递推式即为 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}
np−n 。列向量同理。
对于大小为
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=0m−1f(i−1,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=A−1b 。
设
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=0mAibrm−i=0 ,两遍同时左乘
A
−
1
A^{-1}
A−1,再移项可得
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}
A−1b=−rm1∑i=0m−1Aibrm−i−1。若
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}
1−p2n2−n 的概率
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)) 。