• 线性代数


    线性代数

    基础知识

    行列式

    一个 (n) 阶行列式可以写作一个 (n imes n) 的数表,其中数表的第 (i) 行第 (j) 列的元素可以用下标 (ij) 来表示,例如

    [left|egin{array}{} a_{11} & a_{12} & a_{13} & cdots & a_{1n}\ a_{21} & a_{22} & a_{23} & cdots & a_{2n}\ cdots & cdots & cdots & ddots &cdots\ a_{n1} & a_{n2} & a_{n3} & cdots & a_{nn} end{array} ight| ]

    为了定义行列式的值,我们先定义排列

    排列

    (1,2,dots,n(nge 2)) 组成的有序数组称 (n) 阶排列,通常用 (i_1,i_2,dots,i_n) 来表示。

    我们用排列中的逆序对数量来定义排列的奇偶性,有奇数个逆序对的排列是奇排列,记做 (sgn(i_1i_2dotsi_n)=-1) ,否则为偶排列,记做 (sqn(i_1i_2dots i_n))

    • 性质
      1. 任意交换任意两个位置的数改变排列的奇偶性
      2. 在所有 (n) 阶排列中,奇偶排列数量相等

    行列式的定义

    一个 (n) 阶行列式的值定义为

    [egin{aligned} left|egin{array}{} a_{11} & a_{12} & a_{13} & cdots & a_{1n}\ a_{21} & a_{22} & a_{23} & cdots & a_{2n}\ cdots & cdots & cdots & ddots &cdots\ a_{n1} & a_{n2} & a_{n3} & cdots & a_{nn} end{array} ight| end{aligned}=sum_{i_1i_2dots i_n}(-1)^{sqn(i_1i_2dots i_n)}a_{1i_1}a_{2i_2}dots a_{ni_n} ]

    上三角行列式

    [egin{aligned} left|egin{array}{} a_{11} & a_{12} & a_{13} & cdots & a_{1n}\ 0 & a_{22} & a_{23} & cdots & a_{2n}\ 0 & 0 & a_{33} & cdots & a_{2n}\ cdots & cdots & cdots & ddots &cdots\ 0 & 0 & 0 & cdots & a_{nn} end{array} ight| end{aligned}=prod_{i=1}^n a_{ii} ]

    代入定义式即可验证

    行列式的性质

    1. 行列互换不改变行列式的值
    2. 用一个数乘行列式的某一行等于用这个数乘该行列式
    3. 将行列式中某一行写作两组数的和, 则这个行列式等于两个行列式之和
    4. 对换行列式两行的位置, 行列式反号
    5. 如果行列式中有两行成比例, 则行列式等于0
    6. 把行列式一行的某个倍数加到另一行, 行列式的值不变

    这些性质都很 trivial ,比较好证。于是我们可以用高斯消元的方法把矩阵消除上三角并计算行列式,复杂度 (O(n^3))

    拉普拉斯展开

    (A) 是一个 (n) 阶方阵,我们直接用 (|A|) 来记其对应的行列式。

    (M_{ij}) 表示矩阵 (A) 删去第 (i) 行第 (j) 列后 (n-1) 阶方阵对应的行列式的值,称为 (A) 的余子式。

    • 拉普拉斯展开定理(在后面线性递推的推导中需要使用)

      (forall 1le ile n) ,有 (|A|=sum_{1le jle n} (-1)^{i+j}a_{ij}M_{ij})


    生成树计数

    矩阵树定理

    定义无重边无自环的无向图 (G) 的度数矩阵为 (D(G)=left{egin{aligned}&d_i,i=j\&0,i ot=jend{aligned} ight.) ,邻接矩阵为 (A(G)=E(i,j))

    其中 (d_i) 表示点 (i) 的度数,(E(i,j)) 表示 (i,j) 之间是否有边

    事实上,可以有重边,但不能有自环,自环需要先删去,这点在证明过程中会说明

    定义 (K(G)=D(G)-A(G)) ,称为图 (G) 的基尔霍夫矩阵

    • 矩阵树定理

      对于一个无向图 (G)(G) 的不同生成树个数等于其基尔霍夫矩阵 (K(G)) 的任意一个主余子式的绝对值。

      主余子式:矩阵 (A) 去掉第 (i) 行第 (i) 列后方阵对应的余子式,即 (M_{ii})

      关于任意性,之后也会提到原因。

    下面介绍一些东西,并借助Cauchy-Binet证明矩阵树定理

    基尔霍夫矩阵的行列式

    (n) 个点无向图 (G) 的基尔霍夫矩阵 (K(G)) ,显然有 (forall iin n,sum_{1le jle n}K_{i,j}=0) ,也就是 (K(G)) 的行和为 (0)

    模拟高斯消元的过程,我们发现我们的操作仅仅是将某一行乘上一个数并加给另一行,这样并不改变行和

    而高斯消元的最后,第 (n) 行的元素前 (n-1) 列已经被消成 (0) ,而又要保证行和为 (0) ,因此 (k_{nn}=0) ,矩阵的行列式为 (0)

    因此,我们得到了任意无向图的基尔霍夫矩阵的 (|K(G)|=0)

    不连通图的基尔霍夫矩阵

    这里讨论的是基尔霍夫矩阵的主余子式

    若我们交换图 (G) 的两个点的标号,对应 (K(G)) 的改变是交换两行两列,不改变行列式

    因此可以将每个连通子树的序号排列到一起去,(K(G)) 就变成了分块矩阵的样子

    [left|egin{array}{} G_{11} & 0 & 0 & cdots & 0\ 0 & G_{22} & 0 & cdots & 0\ 0 & 0 & G_{33} & cdots & 0\ cdots & cdots & cdots & ddots &cdots\ 0 & 0 & 0 & cdots & G_{mm} end{array} ight| ]

    (0)(0) 矩阵,(G_{ii}) 是每个连通块矩阵

    显然有,(|K(G)|=|G_{11}||G_{22}|dots|G_{mm}|)

    可以发现,删去一行一列后,只将一个 (G_{ii}) 变为非 (0) ,因此 (K(G)) 的主余子式一定为 (0)

    树的基尔霍夫矩阵

    考虑 (K(G)) 的任意主余子式 (M_{rr}) ,将 (r) 视为树的根,将点按照深度从大到小重新标号,深度相等的点随意,这样根就在第 (n)

    然后我们模拟高斯消元的过程,可以发现实际上每个点会消掉父亲点的一个度数。而每个点度数最终都被消成了 (1) ,因此主对角线全是 (1),而没有父亲的根就被我们直接删去了

    因此 (|M_{rr}|=1)

    边矩阵

    设图 (G=(V,E)) ,其中 (|V|=n,|E|=m) ,设 (G) 的边矩阵为 (B) ,这是一个 (m)(n) 列的矩阵,其中第 (i) 行描述 (G) 的第 (i) 条边 ((u_i,v_i))(B) 中元素 (b_{i,u_i}=1,b_{i,v_i}=-1),其余元素为 (0) (这个定向是任意的)

    可以代入验证基尔霍夫矩阵 (K(G)=B^TB)

    [egin{aligned} K(G)_{ij}=sum_{k=1}^mb_{ik}b_{kj}=left{egin{aligned} &d_i,i=j\ &-1,(i,j)in E\ &0,otherwise end{aligned} ight. end{aligned} ]

    同理可以验证 (M_{ii}=|(B_i)^TB_i|),其中 (B_i) 为把边矩阵 (B) 删去第 (i) 列后的矩阵

    Cauchy-Binet定理

    Cauchy-Binet定理:

    [|AB|=sum_{|s|=n}|A_{s*}B_{*s}| ]

    其中 (A)(m imes n) 的矩阵,(B)(n imes m) 的矩阵,(s) 是一个下标的集合,(A_{s*}) 表示只选取 (s) 中的行形成的方阵,(B_{*s}) 表示只选取 (s) 中的列形成的方阵

    矩阵树定理

    由 Cauchy-Binet 定理可得

    [M_{ii}=|(B_i)^TB_i|=sum_{|s|=n-1}|(B_{is*})^TB_{i*s}| ]

    其中 ((B_{is*})^TB_{i*s}) 就是恰好选中 (s)(n-1) 条边时构成的图的主余子式,当且仅当它们构成的图是树时,((B_{is*})^TB_{i*s}=1) ,否则 ((B_{is*})^TB_{i*s}=0)

    有向图的情况

    可以定义有向图 (G) 的度数矩阵 (D(G)) 表示每个节点的入度,定义有向图 (G) 的邻接矩阵 (A(G)) ,其中 (a_{ij}) 描述从 (i)(j) 的边,则对于基尔霍夫矩阵 (K(G)=D(G)-A(G)) ,主余子式 (M_{rr}) 同样表示以 (r)

    为根的有向生成树数量。

    定义有向图 (G=(V,E)) 的边矩阵 (S)(T) ,对于 (G) 的第 (i) 条边 ((u_i,v_i)) , 定义 (s_{i,u_i}=1) ,且 (t_{i,v_i}=s_{i,v_i}=-1) ,可以验证 (K(G)=S^TT)

    剩下的证明过程类似

    生成树边权乘积和

    实际上,若无向图 (G) 每个边边权为 (v),使用矩阵树定理求得的实际上是下式

    [sum_Tprod_{E(i,j) in T} v_{i,j} ]


    线性递推

    学屁,不学了

  • 相关阅读:
    完毕port(CompletionPort)具体解释
    [Java聊天室server]实战之五 读写循环(服务端)
    ImageMagick的安装及使用
    STL学习小结
    ORACLE中%TYPE和%ROWTYPE的使用
    命令模式在MVC框架中的应用
    代码阅读分析工具Understand 2.0试用
    SimpleDateFormat 的线程安全问题与解决方式
    C++垃圾回收机制
    TH文字编辑器开发的第一个游戏,唐伯虎泡妞
  • 原文地址:https://www.cnblogs.com/butterflydew/p/11052177.html
Copyright © 2020-2023  润新知