基础线性代数

([n]={1,cdots,n})({[n]choose m})为在([n])中选出(m)个不同元素的所有方案

( ext{Some Definitions})

子矩阵

有矩阵(mathbf A_{n*m})(Ssubseteq[n],Tsubseteq[m]),则(mathbf A_{S,T})为仅保留(mathbf A)(rin S)行、(cin T)列得到的矩阵。

子式

(mathbf A_{n*n})(k)阶子式(A_{S,T}=det(mathbf A_{S,T})),其中(S,Tsubseteq{[n]choose k})

主子式

(S=T)(A_{S,T})被称为主子式。

顺序主子式

(S=T=[k])(A_{S,T})被称为顺序主子式。

余子式

(mathbf A_{n*n})(k)阶余子式(M_{S,T}=A_{[n]setminus S,[n]setminus T})
特殊的,当(S={i},T={j})时,(M_{S,T})又记作(M_{i,j})

代数余子式

(C_{i,j}=(-1)^{i+j}M_{i,j})

余子矩阵

(mathbf A_{n*n})的余子矩阵(mathbf C)满足(mathbf C_{i,j}=C_{i,j})

伴随矩阵

(operatorname{adj}(mathbf A)=mathbf A^*=mathbf C^T)
我们有(mathbf A^{-1}=frac{mathbf A^*}{det(mathbf A)})

特征值和特征向量

对于(mathbf A_{n*n}),若数(lambda)(n)维非零向量(mathbf x)使得((mathbf A-lambdamathbf E)mathbf x=mathbf0)成立,则称(lambda)(mathbf A)的特征值,(mathbf x)(mathbf A)的特征向量。
这个方程有解的充要条件是(det(mathbf A-lambdamathbf E)=0)
同时我们有(prodlimits_{i=1}^nlambda_i=det(mathbf A),sumlimits_{i=1}^nlambda_i=sumlimits_{i=1}^nmathbf A_{i,i})

特征多项式

(f(lambda)=det(mathbf A-lambdamathbf E)),不难发现这是个关于(lambda)(n)次多项式,我们称之为(mathbf A)的特征多项式,而它的(k)个解就是(mathbf A)(n)个特征值。

( ext{Some Theorems And Examples})

Cayley-Hamilton定理

一个矩阵的特征多项式是化零多项式。

Laplace定理

(det(mathbf A_{n*n})=sumlimits_{i=1}^na_{i,k}M_{i,k}=sumlimits_{i=1}^na_{k,i}M_{k,i}qquad kin[n])

Cauchy-Binet公式

给定矩阵(mathbf A_{m*n},mathbf B_{n*m}),则(det(mathbf{AB})=sumlimits_{Sin{[n]choose m}}det(mathbf A_{[m],S})det(mathbf B_{[S],m}))

Kirchhoff定理

Link

Vandermonde矩阵

(mathbf V(x_0,cdots,x_n)=egin{pmatrix}x_0^0&cdots&x_n^0\vdots&ddots&vdots\x_0^n&cdots&x_n^nend{pmatrix})
我们有(det(mathbf V(x_0,cdots,x_n))=prodlimits_{0le i<jle n}(x_i-x_j))

Hadamard矩阵

(mathbf H_n)满足(mathbf {HH^T}=nmathbf I_n),一般(n)满足(n=2^k)
(det(mathbf H_n)=pm n^{frac n2})
构造就是(mathbf H_1=(1),mathbf H_{2^k}=egin{pmatrix}mathbf H_{2^{k-1}}&mathbf H_{2^{k-1}}\mathbf H_{2^{k-1}}&-mathbf H_{2^{k-1}}end{pmatrix})
(mathbf H_{i,j}=(-1)^{operatorname{bit}(ioperatorname{ans}j)}quad(i,jin[0,n)))

( ext{Some Algorithms})

常系数齐次线性递推

给定(a_0,cdots,a_{k-1},f_0,cdots,f_{k-1}),且(forall iin[k,+infty),a_i=sumlimits_{j=1}^kf_ja_{i-j}),求(a_n)

( ext{Part.1})

设转移矩阵为(mathbf A)
矩阵快速幂的浪费之处在于我们求出了连续(k)项,但是我们实际只关心一项。
假如说我们现在构造出了一组(c_0,cdots,c_{k-1}),使得(mathbf A^n=sumlimits_{i=0}^{k-1}c_imathbf A^i)
那么答案((mathbf fmathbf A^n)_0=sumlimits_{i=0}^{k-1}c_i(mathbf fmathbf A^i)_0=sumlimits_{i=0}^{k-1}c_if_i)
也就是说如果我们能够构造出一组(c),那么我们就能够在(O(n))的时间内求出答案。

( ext{Part.2})

接下来考虑如何求出(c)
先把(mathbf A^n)写成这样的形式:(mathbf A^n=Q(mathbf A)G(mathbf A)+R(mathbf A))
其中(R(mathbf A)=sumlimits_{i=0}^{k-1}c_imathbf A^i)
那么可以设(G(mathbf A)=sumlimits_{i=0}^kg_imathbf A^i)
如果(G(mathbf A)=0)那么就有(mathbf A^nequiv R(mathbf A)pmod{G(mathbf A)})了。
也就是说如果我们能够构造出一组(g),那么我们就能够在(O(klog klog n))的时间内求出(c)

( ext{Part.3})

接下来考虑如何求出(g)
注意到刚才的过程对于任意矩阵都是成立的。
也就是说如果对于任意一个矩阵而言都能轻松找到(g)那么矩阵就没用了。
所以(g)肯定不是什么好找的东西。然后让我们进入线性代数的内容。
先给出结论:(forall iin[0,k),g_i=-f_{k-1-i},g_k=1)
下面将给出推导过程。

( ext{Part.4})

手玩(mathbf A)可以得到(f(lambda)=(-1)^k(lambda^k-sumlimits_{i=0}^{k-1}a_{k-i-1}lambda^i))
实际上取个反并不会让(k)个解变动,所以我们把它的特征多项式看做(f(lambda)=lambda^k-sumlimits_{i=0}^{k-1}a_{k-i-1}lambda^i)也没问题。
根据Cayley-Hamilton定理,(f(mathbf A)=mathbf0)
所以我们就成功求得了(g)

Berlekamp-Massey算法

给定(a_1,cdots,a_n),求其最短常系数齐次线性递推式。

设第(c)个递推式为(F_c={f_{c,1},cdots,f_{c,s}}),它在(fail_c=a_t)出错了。
假如当前是第(c)个递推式,长度为(s),它已经拟合了(a_1,cdots,a_{t-1})
(Delta_{c,i}=a_t-sumlimits_{i=1}^sf_{c,i}a_{t-i})
如果(Delta_{c,t}=0),那么说明(F_c)当前没有问题,它是对的。直接检查(t+1)位。
否则说明当前的递推式有问题,我们需要修改。
如果(c=0),说明(forall iin[1,t-1],a_i=0),那么易证此时能够拟合前(t)项的最短的递推式为({0,cdots,0}_t)
如果(c e0),我们考虑构造一个最短递推式(F')使得(forall iin(|F'|,t),sumlimits_{j=0}^{|F'|}F'_ja_{i-j}=0wedgesumlimits_{j=0}^{|F'|}F'_ja_{t-j}=Delta_t),然后(F_{c+1}=F'+F_c)就行了。
我们找一个(idin[0,c)),设(r=frac{Delta_{c,t}}{Delta_{id,fail_id}})
构造(F'={0,cdots,0,r,-rf_{id,1},cdots,-rf_{id,s_{id}}}),前面是(t-fail_{id}-1)(0),容易证明这个(F')满足要求。
为了求最短递推式,我们只需要每次找(t-fail_{id}+s_{id})最短的即(s_{id}-fail_{id})最大那一个就行了。
时间复杂度为(O(n^2)),空间复杂度通过小优化可以做到(O(n))

原文地址:https://www.cnblogs.com/cjoierShiina-Mashiro/p/12109447.html