线性基

简介

线性代数中,基是描述向量空间的基本工具。一组向量空间的基(底)是指这个向量空间一个特殊的子集,集中的元素成为基向量,向量空间中的任意元素能唯一地用基向量的线性组合表示,由此将大问题“压缩”为小问题。

定义

称线性空间 \(V\) 的一个极大线性无关组为 \(V\) 的一组 Hamel 基线性基,简称 。定义 \(V\) 的线性基的维数\(\dim V\),即线性基中元素的数量。

性质

  1. 对于线性空间 \(V\),设其维数为 \(n\),则:
    a. \(V\) 中任意 \(n+1\) 个向量线性相关。
    b. \(V\) 中任意 \(n\) 个线性无关的向量均为 \(V\) 的一组基。
    c. \(V\) 中任意无关的向量组均可通过插入一个或多个向量使其成为 \(V\) 的基。
  2. (子空间维数公式)若 \(V_1,V_2\) 均为关于 \(\mathbb P\) 的有限维线性空间,且 \(V_1+V_2,V_1\cap V_2\) 也满足该条件则 \(\dim V_1+\dim V_2=\dim(V_1+V_2)+\dim(V_1\cap V_2)\)

异或空间线性基

OI 中通常研究的是异或空间线性基,即定义在 \(\mathbb Z_2^n\) 的线性空间。异化线性空间的基 \(P\) 具有一下基本性质:

  1. 等价性:在 \(P\) 上运算和在 \(V\) 上运算等价。
  2. 最优性:\(P\) 为满足上述条件的元素个数最小的集合。
  3. \(P\) 的任意非空子集异或和均不为 \(0\)
  4. \(P\) 中元素二进制维数均不相同,以次保证线性无关。

构造

OI 中构造线性基的方式通常有两种,以异或空间线性基举例。

贪心法

将原集合的元素均转为二进制。考虑插入元素 \(x\),对于第 \(i\) 位为 \(1\),若 \(p_i\) 不存在,则令 \(p_i\gets x\);否则 \(x\gets x\ \text{xor}\ p\)。考虑这样构造保证了线性基中的每个元素二进制位数不同,且每个数均能在该过程中被异或出来。一个元素要么插入线性基,要么在循环结束时变为 \(0\),即可以被前面已经插入基中的元素线性表示。

具体应用:

  1. 求原集合中能异或出来的最大值:考虑从高位往低位扫描,若当前能使答案变大则选取。因为后面基中的元素位数均小于当前元素,所以正确性显然。
  2. 求原集合能异或出的最小值:即基中的最小值。因为无论异或上其它哪个元素均会使它变大(特判存在 \(0\) 的情况,即有元素没有插入线性基内,以 \(0\) 的形式退出循环)。

code

inline void ins (int x) {
	for (int i = m; ~i; --i) {
		if (!(x >> i)) continue;
		if (!p[i]) { p[i] = x; return; }
		x ^= p[i];
	}
	fl = 1;
}

高斯消元法

贪心法的本质使构造了一个元素二进制位数均不同的子集,显然用高斯消元也能实现。直接将原集合中的每个数的二进制位看成对应的系数矩阵即可。

具体应用

  1. 求极大值:高斯消元实现下就是所有元素异或起来的结果。
  2. 求极小值:同上贪心法。

code

inline void Gaus_Elimination () {
	for (int i = m, cur = 1; ~i && cur <= n; --i) {
		for (int j = cur; j <= n; j++) if (a[j] >> i) { swap(a[cur], a[j]); break; }
		if (!(a[cur] >> i)) continue;
		for (int j = 1; j <= n; j++) if (j != cur && (a[j] >> i & 1)) a[j] ^= a[cur];
		++cur;
	}
}

时间复杂度

\(n\) 为元素数量,\(m\) 为最高二进制位,则时间复杂度为 \(\mathcal O(nm)\),其中高斯消元常数较大。实数意义下线性基复杂度 \(\mathcal O(nm^2)\)

习题

Luogu P3812
Luogu P3857
Luogu P4570
Luogu P3292
Luogu P4151

posted @ 2023-07-17 20:33  JWRuixi  阅读(286)  评论(0)    收藏  举报