【学习笔记】线性代数

向量放到计算几何里面了。

矩阵

矩阵 A 的主对角线指 Ai,i 的元素。

特殊的矩阵(方阵):

  • 对称矩阵:对于任意 i,j,有 Ai,j=Aj,i
  • 单位矩阵 I 指主对角线全为 1,其余都是 0 的矩阵。任何矩阵乘上单位矩阵都保持不变。
  • 对角矩阵:除对角线外其余元素皆为 0,可以记作 diag{τ1,τ2,,τn}
  • 三角矩阵:主对角线左下方元素皆为 0 称为上三角矩阵。反之也有下三角矩阵。若主对角线上的元素均非 0,则上(下)三角矩阵存在逆,逆仍是上(下)三角矩阵。两个上(下)三角矩阵的乘积仍然是上(下)三角矩阵。
  • 单位三角矩阵:主对角线上元素均为 1 的三角矩阵。单位上(下)三角矩阵的逆仍是单位上(下)三角矩阵。两个单位上(下)三角矩阵的乘积仍然是单位上(下)三角矩阵。
  • 倍乘矩阵 Di(k):特殊的对角矩阵,表示一个对角矩阵,主对角线上第 i 个元素为 k0,其余元素均为 1
  • 对换矩阵 Pi,j:特殊的对称矩阵,所有元素均为 01,其中主对角线上仅第 i 和第 j 个元素为 0,其余均为 1,除主对角线外仅 Pi,j,Pj,i 两个元素为 1,其余均为 0。要求 ij
  • 倍加矩阵 Ti,j(k):特殊的三角矩阵。在单位矩阵 i 的基础上令 Ti,jk
  • 倍乘矩阵,对换矩阵,倍加矩阵被统称为 初等矩阵

方阵 A 的逆 BA×B=I 的矩阵,可能不存在。

矩阵乘法:

当且仅当对于一个 n×m 的矩阵 Am×k 的矩阵 BA×B=C

此时 C 为一个 n×k 的矩阵且 Ci,j=s=1mAi,s×Bs,j

比如说对于矩阵 AB

[114514][191] ,它们的积是 [1×1+1×9+4×15×1+1×9+4×1]。即 [1418]

感性理解一下就是 把 B 矩阵每一列跟 A 矩阵每一行乘起来组成矩阵 C

对于一个 n×m 矩阵 A,它乘以一个 m×m 的正方形矩阵 B,得到的结果大小仍然是 n×m。易得。

对于一个 m×k 的矩阵 B,我们可以靠补 0 的方式补成 m×m 的矩阵。如上面的例子,矩阵 B 就是 [100900100]

那么求得的矩阵 C 变为 [14001800]

注意矩阵乘法没有交换律,有结合律

矩阵转置:

对于矩阵 a,所有 ai,jaj,i 交换位置。矩阵的行列式不变。

矩阵的初等变换:

不仅限于方阵,对于一般矩阵也能进行初等变换。

  • 倍乘:左乘 Di(k) 达到第 i 行乘非 0k 的效果。
  • 互换:左乘 Pi,j 达到第 i 行和第 j 行互换的效果。
  • 倍加:左乘 Ti,j(k) 达到第 j 行乘 k 加到第 i 行的效果。

将左乘改成右乘即为对列进行变换。

高斯消元

对于一个线性方程组 {a1,1x1+a1,2x2++a1,nxn=b1a2,1x1+a2,2x2++a2,nxn=b2an,1x1+an,2x2++an,nxn=bn 求解。复杂度 O(n3)

考虑正常人类做法是一个一个消元。所以我们就模拟人类做法。每次找一个元消掉。

假设我们现在要消去 x1 的元。找到一个 ai,1 最大的 i(选择最大的可以最大程度减少精度爆炸的可能),然后以这个为主元将其他的方程中 aj,1 这一项通过乘系数的方式转化成 ai,1,然后模拟方程相减。我们就可以得到 n1n1 元一次线性方程组。所以这么做下去就好。

有个代码的优化是把找到的 i 和现在正在消的元 j 这两行交换,于是我们最后得到的线性方程组系数就会变成一个 {a1,1,a1,2,,a1,n0,a2,2,,a2,n0,0,,an,n 这样的一个倒三角。于是我们就能从最后一行开始慢慢往回倒求解。

然后对于无解和无穷解的判断:我们在某一行发现主元是 0 时代表这一整行都是 0,所以我们跳过这一行。因为这个相当于减少了一个变量,我们最后得到的仍然是一个倒三角,只是最后有几行的所有系数为 0,于是我们根据这个判断有没有解就好了。注意无解的优先级大于无数解。

如果要求取模的话可以用辗转相处消元,复杂度整体没变还是 O(n3),具体可以去看行列式板子。

行列式

对于一个 n 阶方阵 A,其行列式 det(A)|A| 定义为 p(1)τ(p)i=1nAi,pi,其中 p 定义为 1n 的全排列,τ(p) 定义为排列 p 的逆序对数。π(p1,p2,,pn) 代表排列 p1,p2,,pn 的逆序对数。

行列式的一些特性:

  • 交换一行与一列,或者进行一次矩阵转置,行列式不变。
  • 交换两行或者两列,行列式取相反数。
  • 设方阵 A(a1,1,a1,2a1,na2,1a2,2a2,nbi,1+ci,1bi,2+ci,2bi,n+ci,nan,1an,2an,n),则 det(A)=det(A)+det(A),其中 AA 除第 i 行外与 A 相同,第 i 行分别为 bc
  • 对一行或一列等比例变化(乘上 k?)则行列式同样等比例变化。
  • 如果有两行或者两列相等或等比例,则行列式为 0
  • 将一行(列)乘上一个常数(当然可以为 1)后加到另一行(列)上,行列式不变。
  • det(A)×det(B)=det(A×B)?存疑。

板子的行列式求值是 O(n3) 的。可以利用性质,使用高斯消元的方法得到一个三角矩阵,此时的行列式就是对角线所有元素的积。然后记录现在的行列式是原来的多少倍就好。

LGV 引理

解决 DAG 上不相交路径计数等问题。

定义 w(P) 表示路径 P 上的边的边权积。在做统计方案数问题时可以把边权设为 1e(x,y) 表示从 xy 的每一条路径 Pw(P) 和,即 e(x,y)=P:xyw(P)。起点集合 A,终点集合 B,大小均为 n

记一组不相交路径集 S=S1,S2,,Sn,满足 Si 表示从 AiBσ(S)i 的一条路径且对于任意 ijSiSj 无公共交点。σ(S) 表示 S 对应的一个 1n 的排列。τ(σ) 表示排列 σ 的逆序对数。

记一组相交路径记为 C,一组不相交路径记为 S。不作说明时 P 为任意一组路径,带下标时 Pi 表示 AiBσ(P)i 这条路径。定义 W(P)=i=1nw(Pi)

LGV 引理的内容是:令有一个矩阵 M=[e(A1,B1)e(A1,B2)e(A1,Bn)e(A2,B1)e(A2,B2)e(A2,Bn)e(An,B1)e(An,B2)e(An,Bn)]。则有 det(M)=S:AB(1)τ(σ(S))i=1nw(Si)。其中 S:ABAB 的不相交路径集。人话就是 det(M) 的值就是 AB 的所有不相交路径集的带符号和,其中符号指对于当前 Sτ(σ(S)) 的奇偶性,也即 (1)τ(σ(S))

证明:

  • 根据行列式定义有 det(M)=σ(1)τ(σ)i=1ne(Ai,Bσi)=σ(1)τ(σ)i=1nP:AiBσiw(P)
  • 求积那一坨实际上就是求所有 AB 排列为 σ 的路径集 PW(P)
  • det(M)=σ(1)τ(σ)P=σW(P)=P:AB(1)τ(σ)i=1nw(Pi)=C:AB(1)τ(σ)i=1nw(Ci)+S:AB(1)τ(σ)i=1nw(Si)

若引理成立则须有 Pc:AB(1)τ(σ)i=1nw(Pic)=0,证明:

  • 若存在一个相交路径组 C,则必然存在一个相交路径组 C 满足 C 含有 AiuBi,AjuBjC 含有 AiuBj,AjuBi,然后其他路径都相等。那么有 W(C)=W(C)τ(C)=τ(C)±1(1)τ(C)=(1)τ(C)。至此就得证了。

一般来说构造行列式求值即可。

矩阵树定理(Matrix-Tree 定理)

图(可有向可无向)的生成树计数等问题。

定义无向图 G 的度数矩阵:D(G)i,j={degi(i=j)0(ij)。有向图 G 的入度矩阵:Di(G)i,j={ini(i=j)0(ij),出度矩阵 Do(G)i,j={outi(i=j)0(ij)。图 G 的邻接矩阵 A(G)i,j 连接 ij 的边数。无向图 G 的 kirchhoff 矩阵 K(G)=D(G)A(G)。有向图分为 Ki(G)Ko(G),就是把入度出度矩阵替换无向图的度数矩阵。

定义无向图生成树数量为 t(G),有向图根为 rt 的根向树(子节点指向父节点)生成树数为 tr(G,rt),叶向图(父节点指向子节点)生成树数为 tl(G,rt)

定义图 G 的关联矩阵 M(G) 为大小 n×m 的矩阵。n 是点数,m 是边数。其中(无向图方向任意):M(G)i,j={1(i=head(j))1(i=end(j))0(Otherwise)head(j),end(j) 分别指边 j 的起点终点。图 G 的减关联矩阵 M0(G)M(G) 去掉最后一行形成的 (n1)×m 的矩阵。图 G 的子减关联矩阵 M0(G)[S] 为选出 M0(G) 中的列构成子集 S,并满足 |S|=n1,S{1,2,,m}。暂时不知道有什么用?

无向图矩阵树定理:对于任意 i,都有 t(G)=detK(G)(1,2,,i1,i+1,,n1,2,,i1,i+1,,n)。其中行列式里面那个东西表示矩阵 K(G) 除了第 i 行的所有行和除了第 i 列的所有列构成的子矩阵。

有向图矩阵树根向生成树定理:对于任意 j 都有 tr(G,j)=detKo(G)(1,2,,j1,j+1,,n1,2,,j1,j+1,,n)

有向图矩阵树叶向生成树定理:对于任意 j 都有 tl(G,j)=detKi(G)(1,2,,j1,j+1,,n1,2,,j1,j+1,,n)

以上三个的定理证明,有时间看看能不能补

Best 定理:设 G 是有向欧拉图,则 G 的不同欧拉回路总数 e(G)=k=1ntr(G,k)i=1n(out(i)1)!

证明:

  • 有一个前提定理,一个欧拉图中选一棵根向生成树,除根外每个点以生成树上的边作为最后一条出边,其他的边无论怎么走都能构成一个欧拉回路。证明参考,不会证
  • 现在我们限定 1 为欧拉回路的起点。那么除了 1 其他节点贡献的方案数为 outi1。答案是 tr(G,k)i=2n(outi1)!×out1!。其中 k 取任意一个点都可以,可以通过欧拉回路性质证明欧拉图中任何一个点得到的根向生成树个数相同。
  • 然后把限定起点删掉,一条欧拉回路会以每个出现的 1 分为 out1 段,在没有限定起点里面这 out1 段的循环组合是一样的。所以答案需要除以 out1。上面那个式子除以一个 out1 就是定理式子。

线性基

OI-Wiki 上说有高消的线性基,不过太菜了不会,这里只会贪心构建。

不考虑线性代数的描述的话,个人来讲,一个序列 A,若有集 B 满足在 B 中选择一些元素异或出 A 中的任意元素,此时最小的 B 就是 A 的线性基。一个序列仍有多个线性基,但它们的长度相等。显然此时 A 中任意一个元素只有一种表示方法。令 maxi=1|A|Ai=V A 的线性基大小为 logV

可以支持 O(logV) 插入,O(logV) 判断 A 中选取一些元素能否异或出一个数,O(log2V) 合并两个线性基(显然合并会变为两个序列合并后的线性基),O(logV) 查询在 A 中选取一些元素得到的最大或最小异或和,O(log2V) 查询在 A 中选取一些元素得到的第 k 小。线性基无法表示出 0,数据含有 00 会造成影响时记得特判。

先考虑插入,意味着我们需要让这个线性基能表示出来 x。我们从高到低枚举二进制位,如果现在的 xi 位是 0 我们不做考虑,否则如果线性基这一位是空的,就把这意味变成现在的 x,否则让 x 异或上线性基这一位继续往后走。考虑正确性。首先我们如果把当前 x 放到某一位是一定能表示出来原来的 x 的,怎么异或过来的异或回去就行。不然的话 x 的第 i 位一定会被消掉,因为在这位有贡献的前提是 i 位为 1。那么可知在 i=0 结束后 x 一定为 0,也就是已经可以被表示出来了,不需要再插。同理这个也可以判断一个数能不能被异或出来。在这里我们也可以得到一个性质:线性基上第 i 位的数最高位就是 i,且任意 j<i 都会有线性基第 j 位的数第 i 位为空。

考虑合并两个线性基。因为一个线性基能够异或出待合并序列的所有项,所以事实上我们只要把线性基内的所有数插进去就等于把原序列合并了。

考虑查询最小值。考虑从小往大枚举位数,第 i 位的数如果异或上前面的数根据性质一定会变大,所以不异或就可以得到最小值,也就是线性基里面的最小数。然后查询最大值。从大往小枚举位数能够选择第 i 位能是 1 就选,所以贪心求最大值就好。

最后考虑第 k 小。我们可以用 O(log2V) 的复杂度强制性将线性基所有元素转变为 2i,然后就很好做了。

拉格朗日插值

对于给定的 n+1 个平面直角坐标系的点 (xi,yi),在 xi 互不相同的情况下,我们可以确定唯一的 n 次函数(多项式?)f(x)。拉格朗日插值解决给定 k,求 f(k) 的问题,使用前提是已经证明需要求的东西是一个 n 次多项式。

如果我们能用一个函数表示出来这 n+1 个点,因为此时函数唯一确定,这个函数就是我们的 f(x)。设拉格朗日基本多项式为 li(x)=j=0,jinxxjxixj。注意到对于 ijli(xj)=0,并且有 li(xi)=1。所以这个多项式就可以表示为 f(x)=i=0nyili(x)。然后我们把 k 代进去就行了。复杂度 O(n2)

对于 x 连续的情况,比如 x:[0,n],我们可以在 O(n) 的复杂度内解决。具体地,将 xi=i 代入上面的基本多项式可以得到 l(x)=j=0,jinxjij。考虑根据 ji 这个东西把这些点分为两份,分母显然就是阶乘乘阶乘,注意一下后面那个阶乘可能带符号就好。然后维护关于 xi 的前后缀积 pr,sf,那么分子就可以表示为 pri1×sfi+1。所以这个复杂度就是 O(n) 的。

posted @   Wind_Leaves_ShaDow  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示