线性代数基础

线性代数基础

煎蛋的东西不再赘述。

\(n\) 个向量,若存在向量能被其他向量线性表示,则称这些向量线性相关,否则线性无关。

矩阵的行秩,将矩阵看成若干个行向量,从这些向量中选取尽可能多的向量满足这些向量线性无关,选取的个数 \(k\) 即为矩阵的秩。

矩阵的列秩同理,一般来说,矩阵的秩默认为行秩。

行列式常用定理

定义:对一个 \(n\times n\) 的矩阵 \(A\),其 \(n\) 阶行列式写作 \(\det(A)\)

\[det(A)=\sum_p(-1)^{\tau(p)}\prod_{i=1}^{n}a_{i,p_i} \]

\(p\) 为所有可能的排列,\(\tau(p)\) 表示一个排列 \(p\) 的逆序对个数。

定理一:\(\det(A^T)=\det(A)\),即矩阵转置后值不变。

证明:考虑对于原来的每个排列 \(p\) ,在转置后对应的 \(a_{i,p_i}\) 变成 \(a_{p_i,i}\),只需证明两者的逆序对个数相同。

那么考虑如果存在两个下标 \(i,j\) 满足 \(i< j\)\(p_i>p_j\),会对有 \(1\) 的贡献,那么在转置后 \(p_j<p_i\)\(j>i\),也会有 \(1\) 的贡献。

定理二:对换矩阵的某两行行列式的值取相反数。

考虑对于任意一个排列 \(p\),对换矩阵两行的影响相当于对换排列的两个值。

如果这两个值相邻,无论两者谁更大都会对逆序对个数造成 \(\pm 1\) 的贡献。

考虑一般情况,如果中间间隔了 \(k\) 个数,那么对换两个值相当于在中间进行了 \(2m+1\) 次相邻对换,每次相邻对换均会造成 \(\pm 1\) 的贡献,所以最终也会改变排列的奇偶性,即对行列式的贡献取反。

推论:如果有矩阵有两行相同,则行列式值为 \(0\)

对换两行,那么行列式取值为负,又因为交换两行后矩阵一模一样,即 \(\det(A)=-\det(A)\),推出行列式为 \(0\)

定理三:

\[\begin{aligned} &\begin{vmatrix} a_{1,1} & a_{1,2} & \cdots & a_{1,n}\\ a_{2,1} & a_{2,2} & \cdots & a_{2,n}\\ \vdots & \vdots & \ddots & \vdots \\ b_1+c_1 & b_2+c_2 & \cdots & b_n+c_n \\ a_{n,1} & a_{n,2} & \cdots & a_{n,n} \end{vmatrix} = \begin{vmatrix} a_{1,1} & a_{1,2} & \cdots & a_{1,n}\\ a_{2,1} & a_{2,2} & \cdots & a_{2,n}\\ \vdots & \vdots & \ddots & \vdots \\ b_1 & b_2 & \cdots & b_n \\ a_{n,1} & a_{n,2} & \cdots & a_{n,n} \end{vmatrix} + \begin{vmatrix} a_{1,1} & a_{1,2} & \cdots & a_{1,n}\\ a_{2,1} & a_{2,2} & \cdots & a_{2,n}\\ \vdots & \vdots & \ddots & \vdots \\ c_1 & c_2 & \cdots & c_n \\ a_{n,1} & a_{n,2} & \cdots & a_{n,n} \end{vmatrix} \end{aligned} \]

把行列式展开,每一项都有 \((b_{p_i}+c_{p_i})\),再把括号打开即可得到后者。

定理四:将矩阵的某一行乘上一个系数 \(k\),行列式的值也会乘上 \(k\)

证明:还是把行列式展开,把每一项的 \(k\) 都提取出出来即可。

定理五:将某一行加上另外一行常数倍,行列式的值不变。

证明:结合定理三和定理四即可,读者自证不难。

定理六:上三角矩阵的行列式值为主对角线上所有值相乘。

证明:除了主对角线的排列以外其他值都有系数为 \(0\) 的值。

利用以上定理就可以利用高斯消元得到行列式的取值了!

定理七:降价行列式/行列式展开/拉普拉斯展开:行列式的值等于所有元素于他们的代数余子式的乘积之和。

\(n\times n\) 的矩阵 \(a\),定义 \(A_{i,j}\)\(a_{i,j}\) 的代数余子式。

关于矩阵中一个位置 \(a_{i,j}\) 的余子式指的是忽略第 \(i\) 行第 \(j\) 列,剩下的元素拼在一次的行列式的值。

代数余子式指的是余子式再乘 \((-1)^{i+j}\)

即:

\[det(a)=\sum_{j=1}^{n}a_{i,j}A_{i,j} \]

首先很好理解的是余子式乘上当前元素的值,相当于给排列添加了一个元素。

唯一需要证明的是系数 \((-1)^{i+j}\)

证明:先用定义式将行列式展开,考虑枚举第 \(i\) 行的 \(p_i\)\(j\)

\(1\sim i-1\) 中有 \(x\)\(p_v\) 大于 \(j\),那 \(i+1\sim n\) 中有 \(j-1-(i-1-x)=j-i+x\) 个小于 \(j\) 的。那么对逆序对的贡献为 \(j-i+x+x\)

那么有 \((-1)^{j-i+x+x}=(-1)^{j-i}=(-1)^{i+j}\)

有趣的小牛牛题,已知 \(1798,2139,3255,4867\)\(31\) 的倍数,请在不暴力展开行列式的情况下证明其值为 \(31\) 的倍数。

\[\begin{vmatrix} 1 & 7 & 9 & 8\\ 2 & 1 & 3 & 9\\ 3 & 2 & 5 & 5\\ 4 & 8 & 6 & 7 \end{vmatrix} \]

将第一列乘上 \(1000\) 倍,第二列乘上 \(100\) 倍,第三列乘上 \(10\) 倍加到第四列上,再对第四列行列式展开,发现 \(a_{i,j}\) 都为 \(31\) 的倍数。

范德蒙德行列

\[\begin{vmatrix} a_1^0 & a_2^0 & \cdots & a_n^0\\ a_1^1 & a_2^1 & \cdots & a_n^1\\ \vdots & \vdots & \ddots & \vdots \\ a_1^{n-1} & a_2^{n-1} & \cdots & a_n^{n-1} \end{vmatrix}=\prod_{1\le i<j\le n}(a_j-a_i) \]

证明:

用一些定理取化简它,分两步:

第一步:将 \(n-1\) 行的 \(-a_1\) 倍加到第 \(n\) 行,再将第 \(n-2\) 行的 \(-1\) 倍,第 \(1\) 行的 \(-x_1\) 倍加到第 \(2\) 行。 得到:

\[\begin{vmatrix} 1 & 1 & \cdots & 1\\ 0 & a_2-a_1 & \cdots & a_n-a_{n-1}\\ \vdots & \vdots & \ddots & \vdots \\ 0 & a_2^{n-2}(a_2-a_1) & \cdots & a_n^{n-2}(a_n-a_1) \end{vmatrix} \]

使用行列式展开把第一列展开,发现值其实是忽略第一行第一列的答案。

在对于右下角的那个矩形,每一列都提取出一个 \((a_i-a_1)\)

再不断对剩下的矩形做如此操作即可得到答案。

以及一个很优美的式子:

\(\det(AB)=\det(A)\det(B)\)

这是著名的柯西–比内公式,笔者很想去仔细证明,但是各种细节讨论最终放弃了,有兴趣的读者可以去看看。

煎蛋例题:

Random Forest Rank

重新审视矩阵的秩,矩阵的秩的意义,也可以理解为非零子式的最大阶数,也就是说,我们要找到一个最大的子式使得其行列式不为零。

考虑行列式的定义。

\[det(A)=\sum_p(-1)^{\tau(p)}\prod_{i=1}^{n}a_{i,p_i} \]

这里的矩阵 \(a\) 为邻接矩阵,所以说如果 \(a_{i,p_i}\) 有值,那么存在边 \((i,p_i)\),又因为原图不存在环,所以排列中只能存在长度为 \(2\) 的循环,换言之,每个 \(i\) 只能和一个对应的 \(p_i\) 匹配。

那么就转化为求森林的最大匹配数的两倍的期望。

煎蛋树形 dp 即可,设 \(f_x\) 表示 \(x\) 没有被匹配的概率。

\[\begin{aligned} f_x&=\prod_{y\in son_x}(1-f_y+\dfrac{f_y}{2})\\ ans&=\sum_{i=1}^{n}(1-f_x) \end{aligned} \]

Matrix Rank (Hard Version)

\(f_{i,j}\) 表示前 \(i\) 行秩为 \(j\) 的矩阵数量。

\[f_{i,j}=f_{i-1,j}\times p^j+f_{i-1,j-1}\times (p^n-p^{j-1}) \]

即两种情况,当前秩不增加即为前面的行向量组合得来,有 \(p^j\) 种方案,或者当前秩增加,有 \((p^n-p^{j-1})\) 种方案。

最后求得是一行 \(f\) 的所有值。

放到二维平面上,每次可以从 \((i,j)\) 走到 \((i+1,j)\) 水平步,或者 \((i+1,j+1)\) 右上步。

那么对于一个终点 \(f(n,j)\),一定恰好走了 \(j\) 次右上步,每次的贡献都是确定的,考虑设 \(g_{i,j}\)\(1\sim n\) 层走了若干次水平步,在第 \(i\) 层走水平步贡献为 \(p^i\),恰好走了 \(j\) 次水平步的方案数。

那么:

\[f_{i,j}=g_{j,i-j}\times\prod_{k=1}^{r}(p^n-p^{k-1}) \]

现在考虑求解 \(g\),对每一列直接上生成函数:\(G_i(x)=\sum_{j\ge 0}g_{i,j}x^j\)

\[G_i(x)=\prod_{j=0}^{i}\sum_{l\ge 0}(p^jx)^l=\prod_{j=0}^{i}\dfrac{1}{1-p^jx} \]

记:这里貌似可以使用科技很简便地得到答案。

\[\begin{aligned} G_i(px)&=\prod_{j=0}^{i}\dfrac{1}{1-p^{j+1}x}\\ (1-x)G_i(x)&=(1-p^{i+1}x)G_i(px) \end{aligned} \]

带入第 \(r\) 次项的系数:

\[\begin{aligned} g_{i,r}-g_{i,r-1}&=p^r\times g_{i,r}-p^{i+1}\times p^{r-1}\times g_{i,r-1}\\ g_{i,r}&=\dfrac{p^{i+r}-1}{p^r-1}\times g_{i,r-1}\\ g_{i,r}&=\prod_{j=1}^{r}\dfrac{p^{i+j}-1}{p^j-1}\\ f_{n,r}&=\prod_{j=1}^{n-r}\dfrac{p^{r+j}}{p^j-1}\prod\sum_{j=1}^{r}(p^n-p^{j-1}) \end{aligned} \]

递推从小到大维护 \(f_{n,i}\) 即可。

P10102 [GDKOI2023 提高组] 矩阵

真心煎蛋题,考虑随机一个 \(n\times 1\) 的向量 \(D\)(每一位值非零),我们只需要检查 \(D\times A\times B=D\times C\)

错误概率分析:这个方法本质上检验了 \(D\times (A\times B-C)\) 是否为 \(0\),设 \(G=A\times B-C\)

首先如果 \(G\) 全零,那么一定不会判错。

否则假设最终答案 \((1,v)\) 判错了,即:

\[\sum_{i=1}^{n}D_{1,i}G_{i,v}=0 \]

先算得前 \(n-1\) 项的答案,最后一项 \(D_{1,i}\) 的取值对应着恰好一个答案的取值,那么错误概率为 \(\dfrac{1}{998244353}\)

posted @ 2024-04-26 08:49  Hanghang007  阅读(46)  评论(1编辑  收藏  举报