自闭集训 Day2

线性代数

高斯消元

做实数时,需要找绝对值最大的作为主元,以获取更高精度。

在欧几里得环(简单例子是模合数)意义下也是对的。比如模合数意义下可以使用辗转相除法消元。

欧几里得环:对于任意\(a,b\),都可以定义\(a=qb+r\ \ (|r|<b)\),于是可以辗转相除。(显然,多项式环也是欧几里得环)

逆矩阵

方法与高斯消元类似,左边摆一个原矩阵,右边摆一个单位矩阵,高斯消元的过程中左边的行操作都在右边同样做一遍。最后左边剩下一个单位矩阵,右边就是逆矩阵。

对于方程\(Ax=b​\),如果\(A​\)存在逆矩阵,那么\(x=A^{-1}b​\)。对于有多个\(b​\)询问的时候可以\(O(n^2)​\)做每一个询问。

CF446D

假设起点固定,设\(g_i​\)表示经过\(i​\)号点的期望次数,很容易列出方程,所以可以做到\(O(n^4)​\)。

注意方程的形式是
\[
g_i=\sum_j p_{j,i}g_j+[i=S]
\]
前面一片都总是一样的,只要\([i=S]​\)每次变化。这类似于一个\(Ax=b​\)的多组询问的形式,可以先求出\(A^{-1}​\)然后每次乘上向量就可以得到答案。

总复杂度\(O(n^3)​\)。

矩阵快速幂

多次询问\(A^n b​\),每次\(n,b​\)不同。

可以预处理\(A^{2^k}​\),每次回答的时候只乘\(b​\),可以做到\(m^3\log n+qm^2\log n​\)。

行列式

\(M_{i,j}​\)表示去掉\(i​\)行\(j​\)列之后的矩阵行列式。(余子式)

\(c_{i,j}=(-1)^{i+j}M_{i,j}​\):代数余子式。

\(\det(A)=\sum_i a_{i,j} c_{i,j}\),即按行展开。(按列展开也是对的)

\(\det(A^T)=\det(A)​\)。

\(\det(AB)=\det(A)\det(B)=\det(BA)​\)。

行列式的几何意义:向量在\(d​\)维空间中围成的平行X面体(单纯形?)体积,所以围成的类似于棱锥的体积等于\(\frac 1 {d!}\det(A)​\)。

推论:方程组
\[
\begin{cases}
x_1\ge 0\\
x_2\ge 0\\
\cdots\\
x_d\ge 0\\
\sum x_i\le S
\end{cases}
\]
的体积是\(\frac{s^d}{d!}​\)。

THUPC2017 E

通过行列式,我们可以快速算出\(n​\)维空间中\(n+1​\)个点围成的棱锥的体积。

有一个结论:任选\(n​\)个点,把他们围成的棱锥的体积加起来,最后除以二,就是答案。

为什么?咕咕咕

矩阵树定理

生成树的个数就是度数矩阵减去邻接矩阵,再删掉一行一列,的行列式。

有向图的以\(i​\)为根的树形图,是度数矩阵减去邻接矩阵,再删去\(i​\)行\(i​\)列,的行列式。外向树是入度,内向树是出度。

某知名定理

\(n​\)个点的完全图的生成树个数是\(n^{n-2}​\)。

可以使用矩阵树定理或prufer序列证明。

BEST定理

\(n​\)个点有向图存在欧拉回路的充要条件是所有点入度等于出度。图的欧拉回路的条数是任意一个点的树形图个数乘所有点度数-1的阶乘。(显然任意一个点的树形图个数都相等)
\[
ec(G)=t_w(G)\prod(deg_i-1)!
\]

UOJ226

无向图的欧拉回路条数,如果图是一棵树带重边,那么可以很容易给边定向;如果是环套树带重边,那么可以枚举环上某两个点之间有几条往右几条往左,就可以推出所有边的情况。

带状矩阵

高斯消元可以做到\(nd^2​\),其中\(d​\)是带子的宽度。

如果需要改变主元,为了保证复杂度不能向下找,而要向右找,交换两列,相当于交换两个变量。

用途:比如网格图做生成树个数的时候,带宽可以做到\(\min(n,m)​\),不妨设\(m<n​\),那么复杂度就是\(O(nm^3)​\)。(与博客中直接消元法类似)

CF963E

见博客。

线性空间(向量空间)

定义在某一个数域内,比如\(\rm{F}_p,\R^3​\),使得\(v_1\in S,v_2\in S​\),则有\(v_1+v_2\in S,av_1\in S​\)。(即对加减法和数乘封闭)

对于向量集合\(S​\),记\(\mathrm{span}(S)=\{a_1v_1+a_2v_2+a_3v_3+\cdots\}​\)。

线性无关组\(\{v_{1...k}\}​\):不存在不全为零的\(a_{1...k}​\),使得\(\sum a_iv_i=0​\)。

一个向量空间的基:向量空间中某个极大的线性无关组。

向量空间的维数:基的大小。

矩阵(或一组向量)的秩:张成的线性空间的维数。

定理:行空间和列空间的维数相等。

模\(p​\)意义下,若\(\dim V=d​\),那么共有\(p^d​\)个元素。(???)

\(Ax=b​\)什么时候会有一解、无解、多解?

如果是在模\(p​\)意义下,那么有多解的时候解的个数是\(p^{n-\mathrm{rank}(A)}​\)。(即\(n-\mathrm{rank} (A)​\)就是自由元的个数)

空间\(\{x|Ax=0\}​\)(即\(Ax=0​\)的解空间)是一个线性空间。

\(xor​\)可以定义在\(F_2​\)的\(d​\)维空间。

拟阵

拟阵由一个二元组\((V,I)​\)组成。

\(I​\):拟阵的子集族(即一个由集合组成的集合),满足

  1. \(\empty\in I​\)
  2. \(A\subset B,B\in I​\),那么\(A\in I​\)
  3. \(|A|<|B|,A\in I,B\in I​\),那么存在\(v\in B-A​\),使得\(A+\{v\}\in I​\)

线性无关组是拟阵。(???)

拟阵可以用来证明贪心的正确性。

HDU多校1 B

线性基里面存二元组\((x,p)​\)表示当前值是\(x​\),用到的最早的位置是\(p​\)。插入的时候如果\(p>p'​\)那么交换。

询问的时候取出\(r​\)位置的线性基,只用\(p\ge l​\)的位置的值得到答案。

UOJ 91

类似上一题,把\(p​\)设成消失的时间,然后用一样的方法做。

SRM 620 Hard

对于每个因子列一个方程;

对于每一行、每一列再列一个方程。

如果有解那么方案数就是\(2^{n-\mathrm{rank}}​\)。

伴随矩阵

\(A​\)的伴随矩阵(记作\(\mathrm{adj}(A)​\)),他的\(a'_{i,j}=c_{j,i}​\),即代数余子式的矩阵的转置。

由于代数余子式求起来很慢,我们需要一个更快的做法。可以发现,\(\mathrm{adj}(A)​\)有一些很有趣的性质:
\[
A\cdot\mathrm{adj}(A)=\det (A)\cdot I\\
\mathrm{adj}(A)=\det (A)\cdot A^{-1}
\]
因此,如果\(A​\)可逆,那么可以直接求出\(\mathrm{adj}(A)​\)。

否则,

若\(\mathrm{rank}(A)\le n-2​\),那么伴随矩阵恒为0。(???)

若\(\mathrm{rank}(A)=n-1\),则\(A\cdot \mathrm{adj}(A)=0\),即\(\mathrm{adj}(A)\)的每一列都在\(Ax=0\)的解空间内。又因为\(Ax=0\)的解空间维数为1,所以\(\mathrm{adj}(A)\)的每一列都可以表示为\(t\cdot x_0\)。一种较为丑陋的方法就是先求出\(Ax=0\)的某一个解\(x_0\),然后把\(A\)的某一行换成随机数,那么这一行的余子式不会变,但矩阵变得可逆了,于是就可以求出\(\mathrm{adj}(A)\)的某一行(或列?),于是就可以求出一整个\(\mathrm{adj}(A)\)。

由这个式子可以推出\(A\)在交换环\(R\)(???)意义下存在逆矩阵的充要条件是\(\mathrm{\det A}\)存在逆元:
\[
1=\det (I)=\det(A\cdot A^{-1})=\det (A)\det (A^{-1})\\
\det (A^{-1})=\det (A)^{-1}
\]
又因为
\[
\mathrm{adj}(A)=\det (A)\cdot A^{-1}
\]
所以
\[
A^{-1}=\mathrm{adj}(A)\det (A)^{-1}
\]

Schwartz–Zippel Lemma

一个多项式(可以有多个变量)在模p意义下,如果每个变量的值都是随机的,那么一整个多项式的值为0的概率不超过次数除以p。

判断一个二分图是否有完备匹配

给每一条边一个变量,……掉线

NTF笔记多好qwq

Tutte Matrix

Sherman–Morrison formula

对于列向量\(u,v​\),有
\[
(A+uv^T)^{-1}=A^{-1}-\frac{A^{-1}uv^{T}A^{-1}}{1+v^T A^{-1}u}
\]
发现右边的东西可以\(O(n^2)​\)做出来。

扩展:可以在\(O(n^2k)​\)的时间内实现给一个矩阵加上一个\(\mathrm{rank}=k​\)的矩阵,并维护出它的逆。仍然有公式:

\(U​\)为一\(n\times k​\)矩阵,\(V​\)为一\(k\times n​\)矩阵,且\(I_k+VA^{-1}U​\)可逆,则
\[
(A+UV)^{-1}=A^{-1}-A^{-1}U(I_k+VA^{-1}U)^{-1}VA^{-1}
\]
对于某一个\(\mathrm{rank}=k\)的矩阵,选出它行空间的某一组基,那么其他的行肯定可以被表示出来,所以肯定可以被拆成\(U\cdot V\)的形式。

动态图传递闭包

令\(A​\)为图的邻接矩阵(邻接矩阵内如果有边则随机设值,于是矩阵大概率可逆),那么传递闭包可以视为
\[
I+A+A^2+A^3+\cdots=\frac{1}{I-A}
\]
其中\(i,j​\)可达当且仅当\(A_{i,j}​\)不为零。

如果要加边删边,相当于对\(A​\)做很小的修改,于是可以用上面的方法维护出来。

甚至可以对某个点连出去或连进来的边全部进行修改,因为这样也只是修改了一行或一列而已。

(到底是否正确?)

ICPC2018 Nanjing F

如果固定终点,那么可以设\(f_x​\)表示从这里走到\(T​\)的期望步数,很容易列出方程:
\[
f_x=[x\ne T](1+\sum_y p_{x\rightarrow y}f_y)
\]
直接暴力高斯消元是\(O(n^4)​\),过不去。

由于每一次改变\(T​\)的时候都只会改变一行,于是可以采用上面的方法维护逆矩阵……吗?

需要注意一些初始的东西,似乎是要保证一开始的矩阵要有逆,然而并没有完全听懂。

设\(f_{i,j}​\)表示从\(i​\)走到\(j​\)的期望步数,那么
\[
f_{i,j}=[i\ne j](1+\sum_x p_{i,x}f_{x,j})
\]
令\(g_i​\)表示从\(i​\)走回\(i​\)的期望步数,那么
\[
g_i=1+\sum_x p_{i,x}f_{x,i}
\]
于是
\[
f_{i,i}=1+\sum_x p_{i,x}f_{x,i}-g_i
\]

\[
F=J+PF-G
\]

(其中\(F​\)全是1,\(G​\)为对角矩阵)


\[
(I-P)F=J-G
\]
可以证明\(\mathrm{rank}(I-P)=n-1​\)。

左右同时进行高斯消元,令\(F_{n,i}=0​\),可以消出一个\(F​\)的特解\(Y​\)。

由于\((I-P)x=0​\)的解空间的维数为1,所以可以给\(Y​\)的每一列加上几个\(x​\),然后……由于\(F_{i,i}=0​\),可以知道每一列到底要加几个,然后就做完了……

(???)

设\(q_{k,i}​\)表示走\(k​\)步之后走到\(i​\)的概率,则\(\lim\limits_{k\rightarrow \infty}q_{k,i}=\pi_i​\)。

所以
\[
\pi P=\pi
\]
而且
\[
\sum \pi_i=1
\]
可以解方程解出\(\pi​\)。

于是在一个无限长的出现序列里面,每\(g_i​\)步便出现一次\(i​\),所以\(g_i=\frac 1{\pi_i}​\)。

于是\(g​\)也求出来了,于是\(F​\)也就可以通过求逆求出来。

(不是很严谨)

特征值和特征向量

如果\(\lambda​\)为\(A​\)的特征值,那么满足
\[
\det(\lambda I-A)=0
\]
显然,\(\det (\lambda I-A)​\)为一个关于\(A​\)的一个次数为\(n​\)的多项式,而且首项系数为1。记这个多项式为\(A​\)的特征多项式。

每个特征值对应一个特征向量\(x_i​\),满足
\[
A\cdot \left[ x_1,x_2,\cdots ,x_n \right]=[\lambda_1x_1,\lambda_2x_2,\cdots,\lambda_nx_n ]\\
=[x_i]\cdot D
\]
其中\(D​\)是\(\lambda_i​\)组成给的对角矩阵。记\(P=[x_i]​\)。

所以\(AP=PD,A=PDP^{-1}\),所以\(A^n=PD^nP^{-1}\)。

CF923E

矩阵对角化一下,显然\(\lambda_i=\frac 1 i\),然后发现上面的\(P\)和\(P^{-1}\)都有很好的性质,一通乱乘恰好是一个卷积的形式,于是就没了。

(具体证明懒得写了,看题解吧)

哈密尔顿-凯莱定理

对于\(A​\)的特征多项式\(f(\lambda)=\sum c_k\lambda^k​\),有\(f(A)=0​\)。

所以有
\[
\sum c_kA^k=0
\]

优化线性递推

见博客。

BM算法求矩阵的最小多项式

考虑数列\(\{A^k\}​\)的线性递推式\(A^n=\sum_{i=1}^t c_iA^{n-i}​\),它其实就对应着一个零化多项式,所以我们就是要求这个数列的最短递推式。

考虑随机两个向量\(u,v​\),改成求\(\{u^TA^kv\}​\)的线性递推式。

设\(A​\)中非0位置的个数是\(e​\),那么\(A​\)与一个向量相乘的复杂度是\(O(e)​\)的,于是可以\(O(ne)​\)搞到这个数列,然后再\(O(n^2)​\)求出线性递推式。

总复杂度\(O(n(n+e))​\)。

BM算法解稀疏线性方程组

对于一个方程组\(Ax=b​\)(\(A​\)满秩),有\(x=A^{-1}b​\)。

考虑求出\(\{A^kb\}​\)的最短递推式,那么得到\(Ib=\sum_{i=1}^m c_iA^ib​\)。左右同乘\(A^{-1}​\),得到\(A^{-1}b=\sum_{i=1}^m c_iA^{i-1}b​\)。

\(A^kb=A(A^{k-1}b)​\),所以可以直接递推得到。

总复杂度\(O(n(n+e))​\)。

BM算法求稀疏矩阵行列式

由定义可知\(\det(A)=(-1)^n f(0)​\),其中\(f​\)为\(A​\)的特征多项式。

每行随机乘\(a_i​\),有很高概率它的最小多项式就是特征多项式(必须要满秩?没听清)。

于是稀疏矩阵的行列式就可以在\(O(n(n+e))​\)的时间内求出来。

Cramer法则

对于\(Ax=b\),如果\(\det(A)=0\)那么有唯一解:
\[
x_i=\frac{D_i}{D}
\]
其中\(D=\det(A)\),\(D_i\)表示把第\(i\)列换成\(b\)的行列式。

这个东西似乎没什么用,然而在\(A\)是范德蒙德矩阵的时候可能会有奇效。

(需要用到多项式多点插值的式子和多项式多点求值)

2019暑期金华集训 Day2 线性代数的更多相关文章

  1. 2019暑期金华集训 Day7 分治

    自闭集训 Day7 分治 主定理 由于我沉迷调题,这个地方没听课. 某些不等式 咕了 nth_element 使用快速排序的思想,选一个中间点,看左右有多少个. 期望复杂度\(O(n)\). 首先把一 ...

  2. 2019暑期金华集训 Day7 动态规划

    自闭集训 Day7 动态规划 LOJ6395 首先发现这个树的形态没啥用,只需要保证度数之和是\(2n-2\)且度数大于0即可. 然后设\(dp_{i,j}\)表示前\(i\)个点用了\(j\)个度数 ...

  3. 2019暑期金华集训 Day6 杂题选讲

    自闭集训 Day6 杂题选讲 CF round 469 E 发现一个数不可能取两次,因为1,1不如1,2. 发现不可能选一个数的正负,因为1,-1不如1,-2. hihoCoder挑战赛29 D 设\ ...

  4. 2019暑期金华集训 Day6 计算几何

    自闭集训 Day6 计算几何 内积 内积不等式: \[ (A,B)^2\le (A,A)(B,B) \] 其中\((A,B)\)表示\(A\cdot B\). (好像是废话?) 叉积 \[ A\tim ...

  5. 2019暑期金华集训 Day5 树上数据结构

    自闭集训 Day5 树上数据结构 前置知识 点分治 边分治 树链剖分 LCT Top Tree LCT时间复杂度 线段树每次查询是严格\(\log n\)的,然而splay维护连续段的时候,如果每次查 ...

  6. 2019暑期金华集训 Day5 生成函数

    自闭集训 Day5 生成函数 一般生成函数 无脑地把序列变成多项式: \[ \{a_i\}\rightarrow A(x)=\sum_{n} a_nx^n \] 形式幂级数 生成函数是一种形式幂级数. ...

  7. 2019暑期金华集训 Day3 字符串

    自闭集训 Day3 字符串 SAM 考虑后缀树. SAM的parent树是反串的后缀树,所以后面加一个字符的时候相当于往串前面加一个字符,恰好多出了一个后缀. 于是可以以此来理解SAM. 每一条路径对 ...

  8. 2019暑期金华集训 Day3 图论

    自闭集训 Day3 图论 NOI2019 D2T1 没有真正建出图来的必要,可以直接打取\(\min\)的\(tag\). 也可以把边压进堆里,然后变成一个二维清点问题(???),然后就线段树+并查集 ...

  9. 2019暑期金华集训 Day1 组合计数

    自闭集训 Day1 组合计数 T1 \(n\le 10\):直接暴力枚举. \(n\le 32\):meet in the middle,如果左边选了\(x\),右边选了\(y\)(且\(x+y\le ...

随机推荐

  1. 玩转【Mock.js】,前端也能跑的很溜

    现在开发已经是前后端分离了,前端和后端可以同时进行开发,互不影响,但是有些时候后端开发的接口慢于前端,导致前端需要等待后端的接口完成才能完成前后端对接,为了解决这个痛点,出现了模拟接口数据的方案,目前 ...

  2. vmware vSphere Data Protection 6.1 --------1-部署

    一.简介 1.vdp的介绍 介绍可以参考:vmware vSphere Data Protection简述(未完成) 官方中文文档:https://docs.vmware.com/cn/VMware- ...

  3. 本地计算机上的mysql服务启动停止后,某些服务在未由其他服务或程序使用时将自动停止

    C:\Windows\system32>cd C:\Program Files\mysql-8.0.18-winx64\bin\ C:\Program Files\mysql-8.0.18-wi ...

  4. c# 事件 +=和-=有什么区别

    +=就是發生新事件的同時通知你: -=就是發生新事件的同時不通知你:

  5. win10环境下,让所有程序都以管理员身份运行的办法

    记录下,备查! 打开gpedit.msc组策略编辑. 左侧依次找到:计算机配置->Window设置->安全设置->本地策略->安全选项 然后再右侧找到:用户账户控制:以管理员批 ...

  6. TreeListView排序不对

    winForm控件TreeListView按照一定顺序后添加项,后发觉排序顺序自己变了,解决办法: TreeListViewItem viewItem = new TreeListViewItem() ...

  7. NRF52832 Mesh调试,使其同时支持串口打印和RTT打印

    查看开发环境里面,是否有这个文件,如果没有你的话,则添加文件. 然后要在sdk_config.h中添加使能 然后打开刚才添加的文件retarget.c,主意里面这些地方 这里它进行判断,要么使用RTT ...

  8. iOS - Scenekit3D引擎初探之 - 给材质贴图

    今天简单说一下 SceneKit 给材质贴图. 1,最简单的一种方法,直接打开dae 或者 scn 文件直接设置  如上图,这个dae 文件中只有一个几何体,几何体中只有一个材质球,然后设置材质球的d ...

  9. 记一次渗透某XX站

    0X00 前言 团队A师傅发来个站,问我有没有得搞 正好在搞其他的站,卡住了,开干换个思路. 0x01 信息收集 开burp抓了下包,目标设置了url重写,开了报错,我们随意输入一个控制器就直接报错. ...

  10. python识别文字tesseract

    Ubuntu版本: .tesseract-ocr安装 sudo apt-get install tesseract-ocr .pytesseract安装 sudo pip install pytess ...