• 基础线性代数


    ([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))

  • 相关阅读:
    Spring Boot下的一种导入Excel文件的代码框架
    Spring Boot下的一种导出CSV文件的代码框架
    Spring Boot下的一种导出Excel文件的代码框架
    使用系统参数表,提升系统的灵活性
    折纸效果! Cocos Creator 3.0
    弹性跟随相机!3D入门教程!
    dotnet OpenXML 读取 PPT 主序列进入退出强调动画
    dotnet C# 调用委托的 GetInvocationList 的对象分配
    WPF 下拉框选项做鼠标 Hover 预览效果
    WPF 后台代码做 TranslateTransform 的动画
  • 原文地址:https://www.cnblogs.com/cjoierShiina-Mashiro/p/12109447.html
Copyright © 2020-2023  润新知