线性代数

线性代数

线性基

一般指 01 向量张成线性空间的基底。是一个上三角矩阵。

一般来说,对于 \(m\) 维向量,单次插入线性基是 \(O(\dfrac{m^2}{w})\) 的,多数情况下 \(m\leq w\),此时复杂度为 \(O(m)\)

带删除的线性基

线性基可以在 \(O(\dfrac{nm}{w})\) 的时间内删除单个元素,应用场景是 \(m\) 较大的情形。

具体实现考虑记录下每个向量由原本的哪些向量异或得到。
删除原本的向量 \(i\) 时,分情况讨论:

  1. 存在一个非基向量的组成中有 \(i\),我们用此向量的组成情况去给其它组成中有 \(i\) 的向量消元即可,由于是非基向量,已经消成 0,不会对基向量产生影响。消完后删除这个非基向量即可。
  2. 不存在一个非基向量的组成中有 \(i\),我们只能在基向量中找到有 \(i\) 组成的向量,我们找到最低位满足条件的基向量,对其它位消元,最后把这个基向量删除即可。

区间线性基

除了较为暴力的使用线段树/猫树直接维护区间线性基,对于没有修改的情形我们有更好的做法。

考虑离线从前往后加入元素,我们希望尽量保证线性基内的元素都是最靠后的。
当枚举到一个当且元素有值的 bit 时,我们令这个位置的基向量为当前元素,保留一个时间戳,然后把基向量异或上当且元素递归下去。

那么区间 \([l,r]\) 的线性基底,就是处理到 \(r\) 时,时间戳 \(\geq l\) 的基向量集合。

k 进制线性基

博主联考刚学的,场上写了个爆搜拿了 85pts/tx。

\(k\) 可以是合数。
我们插入元素时对元素辗转相除以规避没有逆元的情形。
查询线性基是否可以表示一个元素时,\(k\) 为质数时因为有逆可以很轻松的实现,若系数没有逆,我们可能有多种消除方案。具体的,假如当前要用 \(a\) 去消 \(b\),记 \(g=\gcd(a,k)\)\(ax\equiv b\pmod k\),这里对于一个合法的解 \(x\) 是一个公差为 \(\dfrac{k}{g}\) 的等差数列。

处理方法也很简单,插入元素时当我们要在基里加入新元素,将基的 \(\dfrac{k}{g}\) 倍继续往下插入即可。

时间复杂度取决于维数,除了辗转相除的部分和 \(k\) 没啥关系。

矩阵树定理

相比于以 prufer 序列推导相关问题可能处理难度更低。
基本介绍可以参考:矩阵树定理学习笔记

LGV 引理

感觉再考一遍的概率很低。

posted @ 2023-07-07 20:40  juju527  阅读(107)  评论(0编辑  收藏  举报