首页 > 其他分享 >行列式

行列式

时间:2024-09-16 17:01:43浏览次数:9  
标签:limits 矩阵 路径 det 行列式 例题

行列式

对于 \(n\times n\) 的方阵 \(A\),定义其行列式为:

\[\det(A)=\sum\limits_{p}(-1)^{\operatorname{sign}(p)}\prod\limits_{i=1}^nA_{i,p_i} \]

其中 \(p\) 为所有 \(n\) 阶排列, $ \operatorname{sign}(p)$ 为 \(p\) 的逆序对个数。

1.行列式的性质

  • 对于三角矩阵,其行列式为对角线上所有元素的乘积。

考虑哪些 \(A_{i,p_i}\neq 0\) 即可。

  • 把矩阵 \(A\) 任意一行或一列乘以常数 \(k\) ,行列式变为 \(k\det(A)\)。

比较显然。

  • 交换行列式任意两行或两列,矩阵的行列式变为 \(-\det(A)\)。

只需证明交换一个排列的两项,逆序对数的奇偶性恰好乘上 \(-1\)。

  • 将某一行或列的所有元素乘上常数 \(k\) 之后加到另一行或列的对应元素上,行列式不变。

新的行列式等于原本行列式和另一个矩阵行列式的和,而另一个行列式显然为 \(0\)。

1.1 求矩阵行列式

考虑高斯消元的过程,发现只使用了交换两行以及把某一行的若干倍加上另一行的对应元素上的操作,前者每次行列式乘上 \(-1\),后者行列式不变,因此只需要知道消元结束的矩阵的行列式即可,而消元结束后变成上三角矩阵,因此可以直接乘起来。

复杂度 \(\Theta(n^3)\)。

1.2 上 Hessenberg 矩阵

  • 定义: 对于 \(i>{j+1},A_{i,j}=0\) 的矩阵。

考虑第一行选择了第 \(x\) 列,那么对于 \(1\to x-1\) 列,它们选择哪一行就已经固定了,此时变成一个 行列都为为 \(n-x\) 的子问题。

设 \(f_i\) 表示后 \(i\) 行列的子问题,转移容易做到 \(O(n)\),总复杂度 \(O(n^2)\)。

1.3 求特殊矩阵行列式

对于 \(n\times n\) 的方阵 \(A,B\),\(\det(AB)=\det(A)\det(B)\)。

  • 求矩阵 \(A_{i,j}=f(\gcd(i,j))\) 的行列式,其中 \(f(x)\) 是一个积性函数。

考虑构造三角矩阵 \(B,C\) 使得 \(B\times C=A\)。

考虑构造 \(B_{i,j}=[j|i]g(j),C_{i,j}=[i|j]\),其中 \(g(x)\) 也是一个积性函数。

那么

\[\begin{align} (B\times C)_{i,j} & =\sum\limits_{k=1}^nB_{i,k}C_{k,j}\\ &=\sum\limits_{k=1}^n[k|i]g(k)[k|j]\\ &=\sum\limits_{k|\gcd(i,j)}^ng(k)\\ \end{align} \]

我们希望让 \(\sum\limits_{k|\gcd(i,j)}g(k)=A_{i,j}=f(\gcd(i,j))\),也就是 \(f(x)=\sum\limits_{d|x}g(d)\)。

由莫比乌斯反演可以得到 \(g(x)=\sum\limits_{d|x}f(d)\mu(x/d)\)。

那么 \(\det(A)=\det(B)\det(C)=\prod\limits_{i=1}^ng(i)\)。

例题 SP1772 DETER2 - Find The Determinant II

1.4 柯西–比内公式(Cauchy–Binet formula)

方阵的性质太好了,不过对于一般的矩阵也有类似的性质。

对于 \(n\times m\) 的矩阵 \(A\),\(m\times n\) 的矩阵 \(B(m\geq n)\),我们选取 \(\{1,2\dots m\}\) 的一个 \(n\) 元子集 \(S\),设 \(A_S\) 为 \(A\) 中的所有行以及下标在 $S $ 中的列构成的子矩阵,\(B_S\) 同理。

那么 \(\det(AB)=\sum_\limits{S}\det(A_S)\det(B_S)\)。

例题 LOJ3626 愚蠢的在线法官]

2.LGV引理(Lindström–Gessel–Viennot lemma)

对于一个有向无环图,边有权值,给定图上的 \(k\) 个起点和 \(k\) 个终点,对于一个 \(k\) 阶排列 \(p\) ,我们定义一组不相交路径为选出 \(k\) 条路径,满足第 \(i\) 条路径从第 \(i\) 个起点连向第 \(p_i\) 个终点,且所有路径不经过重复的点,其权值为经过的所有边的权值乘积。

一个排列 \(p_i\) 的权值定义为所有不相交路径组的边权和,记为 \(val(p)\)。

LGV 引理说的是,设 \(G_{i,j}\) 为从第 \(i\) 个起点到第 \(j\) 个终点的所有路径的边权乘积的和,那么

\[\begin{align} \det(G)=\sum\limits_{p}(-1)^{\operatorname{sign}(p)}val(p) \end{align} \]

对于一组相交路径,我们考虑求出其字典序最小的一个交点,考虑其对应的两条路径 \(i\to p_i,j\to p_j\),那么我们变成 \(i\to p_j,j\to p_i\),那么就对应到了另一组相交路径,因此这是一组双射。

因为两组路径的符号相反,因此总贡献为 \(0\),证毕。

注意 LGV 引理并不能求出不相交路径个数,只能求出其带符号和。

例题 CF167E Wizards and Bets

完全的板子。

不过对于某些特殊情况,LGV 引理可以求出不相交路径个数。

练习 P7736 [NOI2021] 路径交点

例题【模板】LGV 引理

不妨把 \(a,b\) 都从小到大排序,那么容易证明合法的不相交路径一定满足 \(p_i=i\),而此时 \(\operatorname{sign}(p)=0\),故 \(\det\) 的值就是不相交路径数量。

例题CF348D Turtles

和上面一样。

例题 [ABC216H] Random Robots

考虑 \(x-t\) 图像,假如我们确定了每个机器人最终的位置,那么就变成了不相交路径计数,并且和上面一样的满足 \(p_i=i\),因此对于这样的行列式求和就是答案。

把行列式拆开,我们就是要给每个起点选一个终点,乘上符号再求和。

注意到值域不大,考虑从小到大依次确定每个最终位置,设 \(f_{S,j}\) 表示已经确定了终点的起点集合是 \(S\) 个最终位置,当前的位置是 \(j\),的符号和。

转移时考虑要不要把这个位置作为某个最终位置即可。

复杂度 \(\Theta(2^KKN)\)。

例题 P9041 [PA2021] Fiolki 2

考虑怎么判定一个 DAG 是否存在一组不相交路径。

选取大质数 \(P\),给每条边随机一个 \(P\) 以内的权值,这样有大概率 \(det(G)\neq 0\leftrightarrow\) 存在一组不相交路径。

\(\det(P)\neq 0\) 的条件就是所有向量线性无关,因此最多能选出的不相交路径数量就是矩阵的秩。

考虑对 \(r\) 扫描线,维护 \(f(l,r)\) 不同的位置,这是经典的带删除线性基的技巧,维护每个向量的插入时间,插入新的向量时如果比当前位置的向量插入时间考后就 swap。

复杂度 \(\Theta(nk^2+mk)\)。

例题 [LOJ6677]EntropyIncreaser与菱形计数

通过智慧的转化变成在墙角堆叠立方块的方案数,在根据高度不同转化成不相交路径计数。

此时直接使用 LGV 引理就可以做到 \(O(n^3)\),但是还可以继续推式子。

练习P8114 [Cnoi2021] 六边形战士

练习P8333 [ZJOI2022] 计算几何

3.矩阵树定理(Matrix-Tree Theorem)

3.1 无向图生成树计数

对于一个无向图 \(G\),定义其度数矩阵 \(D\)

\[D_{i,j}= \begin{cases} deg_i,i=j\\ 0,i\neq j\\ \end{cases} \]

定义其邻接矩阵 \(E_{i,j}=e_{i,j}\)。

其中 \(deg_i\) 为 \(i\) 的度数,\(e_{i,j}\) 为 \(i,j\) 之前的边的数量。

定义其 Laplace 矩阵 (Kirchhoff 矩阵)为 \(L_{i,j}=D_{i,j}-E_{i,j}\)。

设 Laplace 矩阵去掉任意一行一列的矩阵为 \(L'\),那么该图的生成树数量等于 \(\det(L')\)。

更进一步的,当边有权时,将 \(D,E\) 改为对应边的权值和,那么 \(\det(L')\) 求出的就是该图所有生成树的边权乘积之和。

练习P6178 【模板】Matrix-Tree 定理

练习P3317 [SDOI2014] 重建

练习[HEOI2015] 小 Z 的房间

例题[SHOI2016] 黑暗前的幻想乡

题目求的是有 \(n-1\) 种不同颜色的边构成的生成树数量。

换一种形式描述就是,选择一个大小为 \(n-1\) 的颜色集合,并要求这里面的颜色至少出现一次。

反过来容斥一下就是钦定若干颜色不出现。

每次跑矩阵树定理即可,复杂度 \(\Theta(2^nn^3)\)。

例题 [JSOI2008] 最小生成树计数

考虑 Kruskal 的过程,当考虑到边权为 \(w\) 的边的时候,边权 \(\leq w-1\) 的边已经缩成了若干连通块,而加入边权为 \(w\) 的边就是又缩起来若干连通块,对于每个这样的连通块跑矩阵树定理就行了。

例题 [ABC253Ex] We Love Forest

练习【UR #12】密码锁

练习 CF578F Mirror Box

3.2 有向图树形图数量

树形图分为 根向(所有边指向根)叶向(所有边指向叶子)

定义入读、出度矩阵分别为 \(D^{in},D^{out}\),也就是把原本的度数矩阵改成入度数量或者出度数量。

定义 \(L^{in}=D_{in}-E\),\(L^{out}\) 类似,那么以 \(r\) 为根的根向树形图数量就是 \(\det(L^{out}(r))\),其中 \(L^{out}(r)\) 为 \(L^{out}\) 去掉第 \(r\) 行第 \(r\) 列的矩阵。

练习[CQOI2018] 社交网络

例题P4033 [Code+#2] 白金元首与独舞

把外界建成一个虚点,那么就是求以外界为根的内向树数量,暴力复杂度 \(\Theta((nm)^3)\)。

考虑只建出每个关键点沿着每个方向遇到的第一个关键点的边,就能过了。

3.3 生成树边权和

最暴力的做法是枚举每一条边计算在生成树中出现的次数,复杂度 \(\Theta(n^3m)\)。

考虑将一条边权为 \(v\) 的边权设为一个一次多项式 \(1+vx\),那么一棵树上边权乘积的一次项系数就是边权和。

需要维护一次多项式的加减乘除,复杂度 \(\Theta(n^3)\)。

例题[省选联考 2020 A 卷] 作业题

套路莫反之后就是变成求一个图的生成树边权和的形式,套用上面做法即可。

练习P5296 [北京省选集训2019] 生成树计数

3.4 BEST 定理

有向欧拉图的欧拉回路数量 = 以任意一点为根的向生成树数量 \(\times \prod\limits_{i}(deg_i-1)!\)。

练习【模板】BEST 定理 | Which Dreamed It

例题 P7531 [USACO21OPEN] Routing Schemes P

建立超级源点,超级汇点,连边之后判断有解的条件就是有欧拉回路。

使用 BEST 定理求出欧拉回路数量即可。

例题[AGC051D] C4

无向图欧拉回路计数是NPC,枚举一条边之后就变成有向图了。

例题CF1919E Counting Prefixes

练习[ABC336G] 16 Integers

标签:limits,矩阵,路径,det,行列式,例题
From: https://www.cnblogs.com/jesoyizexry/p/18416439

相关文章

  • 《高等代数》范德蒙德行列式的证明
    说明:此文章用于本人复习巩固,如果也能帮助到大家那就更加有意义了。注:1)利用数学归纳法证明范德蒙德行列式。    2)将范德蒙德行列式最后一列除了“1”以外都化为“0”,再按照最后一列展开。   3)为了与题目所证的公式靠拢,将连乘里面的两个x位置调换,使得用下标大的x......
  • 【高等代数笔记】(8-13)N阶行列式
    2.N阶行列式数域K\textbf{K}K上的二元方程组{......
  • 旋转矩阵的行列式为什么一定要等于1?
    一.为什么旋转矩阵要等于1?旋转概念:“旋转”就是一种没有拉伸或压缩的变换,|A|就只能是±1中的一个了。成为旋转矩阵的条件:正常情况下,求的旋转矩阵是不会出现-1这种情况的。det®=-1则表明R无效。解释:一个矩阵要能成为一个旋转矩阵,则它在构造上必定是正交矩阵,同时还是矩阵的每个......
  • 行列式学习笔记
    前置知识部分内容摘自OI-Wiki排列由\(1,2,\dots,n\)组成的有序数组称为\(1,2,\dots,n\)的排列。前\(n\)个正整数的不同排列有\(n!\)个。如果排列的逆序对个数是奇数,那么这是一个奇排列;如果排列的逆序对个数是偶数,那么这是一个偶排列。置换一个有限集合\(S\)到自......
  • 矩阵行列式计算模版
    #include<iostream>usingnamespacestd;constintMAXN=100;intdet(inta[MAXN][MAXN],intn){intres=0;if(n==1){returna[0][0];}else{for(intj=0;j<n;j++){intt[MAXN][MAXN];......
  • 【笔记】矩阵的行列式
    定义行列式(Determinant)是对\(n\)阶方阵\(A\)定义的,是一个标量。\(A\)的\(n\)阶行列式\(\operatorname{det}(A)\)或\(|A|\)定义如下:\[\operatorname{det}(A)=\sum_p(-1)^{\operatorname{sgn}(p)}\prod_{i}A[i][p_i]\]这里将排列的奇偶性定义为了\(\operatorname{sgn......
  • 行列式梳理
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档目录定义2阶行列式3阶行列式n阶行列式排列逆序特殊行列式上三角或下三角行列式对称与反对称行列式性质性质1性质2性质3性质4性质5行列式按一行(列)展开定理余子式与代数余子式按一行(列)展开定理异乘变零......
  • 线代 第一章行列式
    1.全排列和对换计算逆序数2.行列式3.副对角线三角4.行列式的性质5.行列式按行(列)展开余子式,代数余子式伴随矩阵6.重要公式对角线三角副对角线三角范德蒙7.克拉默法则(解方程)......
  • 行列式学习笔记
    行列式基础概念\(n\)阶行列式\[\begin{vmatrix}a_{11}&a_{12}&...&a_{1n}\\a_{21}&a_{22}&...&a_{2n}\\...&...&&...\\a_{n1}&a_{n2}&...&a_{nn}\\\end{vmatrix}\]完全展开式$\sum_{......
  • 求解一个行列式的值
    求一个行列式的值问题描述:输入一个行列式的阶数,再按行输入这个行列式,再计算出它的值。解法:存储一个行列式可以使用一个n行n列的数组。使用双重for循环按行输入行列式的值即可。cout<<"请输入行列式的阶数:"<<endl;cin>>n;cout<<"请按行输入一个行列式:"<<endl;for......