线性基学习笔记

根据线代常识,\(n\)维欧几里得空间中的\(n\)\(n\)维向量\((k \leq n)\)可以唯一地表示\(n\)维空间中的任意一个向量。根据定义,基底中的向量线性无关,并且不存在\(0\)。然后我们很容易有一种基于高斯消元求基底求法。

假设我们现在已经构造出了\(n\)维基底的前\(m\)个向量,且第\(i\)个向量\(\vec{a}\)为:\(\begin{bmatrix}a_{i,1}, a_{i,2},\cdots,a_{i,n}\end{bmatrix}\),考虑加入第\(m+1\)个。那我们如果能构造出一个向量\(\begin{bmatrix}x_1, x_2,\cdots,x_n\end{bmatrix}\)满足:

\[\begin{bmatrix}x_1, x_2,\cdots,x_m\end{bmatrix} \times \begin{bmatrix}a_{1,1}, a_{1,2},\cdots,a_{1,n} \\ a_{2,1}, a_{2,2},\cdots,a_{2,n} \\ \cdots \\ a_{m,1}, a_{m,2},\cdots,a_{m,n} \end{bmatrix} = \begin{bmatrix}a_{m+1,1}, a_{m+1,2},\cdots,a_{m+1,n}\end{bmatrix} \]

那么第\(m+1\)个向量就线性相关了。否则我们就可以把它加入基底中。这样的复杂度是\(O(n^4)\)的。


很显然向量的运算定义在取模的域中依然适用。随之产生的就是模\(2\)域下的基底,一般称之为线性基

考虑把一组基底转化为上三角矩阵。这在一般情况下意义不大,但对线性基而言却有一些优美的性质。由于模\(2\)意义下的向量加法可以看成是两个非负整数的异或,上三角矩阵就意味着:\(n\)维线性基对应的\(n\)个整数中,两两二进制的最高位不同。因此我们往线性基中加入一个整数时,只需要看这个整数的最高位在线性基中出现过没有,如果没有,那就直接加入之;如果有,那就异或上线性基中这个整数,转化为最高位更低的子问题。这样构造线性基的复杂度是\(O(n^2)\)的,\(n\)为维数。由于一般整数不会超过\(2^{64}\),所以\(n<64\)

根据上三角矩阵的优美性质和贪心思想,我们可以用线性基求解集合中异或和的最大值问题。

il LL calc(cn base &bas, LL res = 0){
	fb(i, 59, 0)if(bas.vec[i] && !(res>>i&1))res ^= bas.vec[i];
	return res;
}
posted @ 2021-02-06 22:37  修电缆的建筑工  阅读(117)  评论(1编辑  收藏  举报