• 再探矩阵树定理


    坚定不移的向前奔跑 才是我应该做的事情吧. 多思考一下 你会发现不一样的世界。

    所谓矩阵树定理 用于一张无向图之上求出该图的所有生成树的个数。

    在探究其之前我们先再次回顾一番 矩阵的基本定义 和一些比较基本的操作。

    矩阵 有行有列 不过有两个定义 行向量 和 列向量 分别指某一行或某一列所形成的向量。(高维空间

    线性空间 对于一个向量 w 如果w可以表示为 $w=sum_{v_iin S}a_iv_i$ 那么我们认为w是可以被S中的向量线性组合出来的。

    线性无关:如果一个向量空间中的每个向量偶不能表示成其他向量的组合,那么这个向量空间就是线性无关的。

    基底:对于一个线性空间V来说 他的基底是其最大的一个线性无关子集。这句话三个重点:V的子集 最大 且线性无关。

    我们不难推出 对于一个线性空间V来说其基底可能有不同 但是大小一定相同,可以尝试证明。

    我们定义矩阵的加法:两个长宽相等的矩阵相加 即各个对应的位置上的元素相加。

    定义 数乘 即一个数字和这个矩阵的各个位置上的数字相乘。

    定义 转置 即矩阵的元素 沿其对角线对应翻转。

    矩阵的乘法,这个不再赘述 大体上是第一个矩阵的所有行向量和 另外一个矩阵的列向量相乘。

    其具有分配率:A(B+C)=AB+AC (B+C)A=BA+CA 结合律:ABC=A(BC) #####显然不具有交换律

    单位矩阵 I 一个n阶的单位矩阵为$n*n$的矩阵 $A_{i,j}=[i=j]$

    单位矩阵 有用的地方就是 IA=AI=A;

    逆矩阵 对于一个n阶的矩阵A 定义其逆矩阵为$A^{-1}$ 所以存在 $Acdot A^{-1}=I$

    注意 :一个矩阵存在逆矩阵当且仅当其行向量所组成的向量空间是无关的。通俗一点任意一个行向量不能被其他的行向量所拼出来。

    但是具体的细节我也并不是很清楚,所以这个结论还是先记下来比较好。

    矩阵怎么求逆?我们知道 平常我们使用矩阵要不就是高斯消元 要不就是 矩阵快速幂。(十分老套的套路

    矩阵有三种初等变换 我们发现 将一个矩阵初等变换成I矩阵并不难 但是此时相当于成上了 一个 $A^{-1}$

    我们有 对应的矩阵 做相同的初等变换 意味着也乘上了一个 $A^{-1}$那么显然如果用I乘上这个矩阵我们就求出矩阵的逆啦。

    最后我们的做法是 将A矩阵和I矩阵绑一块 对A进行初等变换形成I矩阵 此时也对I进行初等变换那么就形成$A^{-1}$这个逆矩阵了。

    下面 到了重点了 矩阵的行列式:

    一个矩阵A的行列式通常表示为 det(A) 或者 |A|.

    首先我们定义一个集合 $S_n$表示所有长度为n的排列所构成的集合。

    然后再定义一个 f(s) 表示排列s内的逆序对的数量,$s_i$表示排列s的第i个数。

    sgn(s)=f(s)%2?1:-1 这里我写一个问号表达式。。大体上表达的意思是 这个排列的逆序对为奇数个的话就是sgn(s)为1 反正为-1

    那么此时我们就可以给一个矩阵A的行列式下达定义了 其为 $|A|=det(A)=sum_{sin S}sgn(s)Pi_{i=1}^{n}a_{i,s_i}$

    注意这里的s还是还是1~n的一个排列。继续往下 是和行列式有关的东西 不过今天的主体是矩阵树定理这里不再过多赘述。。

    矩阵树定理:

    对于n个点m条边的无向图 该图同时没有自环 令一个n阶的方阵D为该图的度数矩阵,对于D来说 满足:$d_{i,j}=i==j?deg(i):0$

    其中deg(i)表示连向点i的边的数量。即i点的入度。

    同时对于一张n个点m条边额无向图无自环,令一个n阶方阵A为该图的邻接矩阵 对于A来说满足:$a_{i,j}=[(i,j)in E]$

    令一张n个点m条边的无自环无向图的n阶拉普拉斯方阵为L 有 L=D-A.

    定理:对于一张n个点m条边的无自环无向图来说 其拉普拉斯矩阵为L 我们将n阶方阵L去掉任意一行及一列得到了一个n-1阶的方阵$L_T$

    这张图的生成树数量为det(L). 证明:自证很难,不再赘述。

    如何求解行列式 按照我们上述的定义来看 行列式的求解需要搞排列 计算逆序对什么的 实际上求解行列式快速的方法还是高斯消元。

    我们把L 进行初等变换 变成上三角矩阵 然后此时对角线的乘积即为生成树的数量 在消的时候避免掉精一般采用辗转相除法进行消元。

    注意 交换两行的时候 行列式的值注意变号。

    这里 再次说明一下 求出行列式时的一些小细节:(暂时还不知道为啥,也不想研究为啥。因为 因为 我真的搞不懂是为啥

    首先再次定义一下一个方阵 注意是方阵的行列式 存在一个上三角/下三角的方阵的行列式是其对角线之积。

    特别的 单位方阵的行列式为1

    对于一方阵其一行/一列乘以k 行列式乘k 对于进行初等变换的话 行列式不变。

    对于一个矩阵交换其两行/两列 行列式变号

    推论 一个矩阵两行或两列成比例行列式为0 这也就是我们所说的 此时不是线性无关的了。

    最后有可能的是 一个对角线上的值为0 此时说明不是线性无关的了 那么 行列式的值为0

    就这么多。

    上一道例题:[JSOI2010巨额奖金](https://www.luogu.com.cn/problem/P2143)

    求最小生成树的个数 权值相同的边个个数不超过10.

    显然我们 先做一遍最小生成树。我们可以得到一个明显的结论即:权值相同的边个数是一定的。

    能替换也是权值相同的边之间的替换。所以考虑分开考虑。乘法原理搞。

    考虑如何硬套上矩阵树定理 我尝试了一下发现很难。我想到了爆搜 然后判断是否合法即可。

    在权值相同的边的个数不超过10的情况下可行。

    考虑矩阵树 我们发现把边抽出来后形成了一些联通块 联通块缩点。

    然后 就形成了 矩阵树定理了 这个做法适用于 权值相同的边的个数可以很大的情况。

    总之 我打算使用爆搜解决这个问题,缩点什么的过于繁杂。不是很想写。

  • 相关阅读:
    0.0pomelo的优缺点
    python操作MySQL
    MySQL-基本查询语句及方法,连表和子查询
    MySQL-外键对应关系
    MySQL--存储引擎、数据类型、约束条件
    数据库MySQL安装、基本指令
    并发编程-协程、池,io模型
    python并发编程-GIL全局解释锁,Event事件,信号量
    并发编程-线程
    并发编程-进程
  • 原文地址:https://www.cnblogs.com/chdy/p/12337529.html
Copyright © 2020-2023  润新知