线性基

数学基础

向量空间 vector space

定义 $(F, V, +, \cdot)$ 为向量空间,其中 $F$ 为域, $V$ 为集合, $V$ 中元素称为向量, $+$ 为向量加法, $\cdot$ 为标量乘法,且运算满足 8 条公理(见维基百科)。

线性无关 linearly independent

对于向量空间中 $V$ 上 $n$ 个元素的向量组 $(\mathbf{v_1},\mathbf{v_2},\dots,\mathbf{v_n})$, 若存在不全为 $0$ 的数 $a_i\in F$, 满足 $$a_1\mathbf{v_1}+a_2\mathbf{v_2}+\dots+a_n\mathbf{v_n}=0$$
则称这 $n$ 个向量 线性相关,否则称为 线性无关

线性组合 linear combination

对于向量空间中 $V$ 上 $n$ 个元素的向量组 $(\mathbf{v_1},\mathbf{v_2}, \ldots, \mathbf{v}_n)$, 其线性组合是如下形式的向量
$$
a_1\mathbf{v_1}+a_2\mathbf{v_2}+\dots+a_n\mathbf{v_n}
$$
其中 $a_1,a_2,\dots,a_n\in F$

一组向量 线性无关 等价于 没有向量可用有限个其他向量的 线性组合 所表示.

张成 span

对于向量空间中 $V$ 上 $n$ 个元素的向量组 $(\mathbf{v_1},\mathbf{v_2}, \ldots, \mathbf{v}_n)$ ,其所有线性组合所构成的集合称为 $(\mathbf{v_1},\mathbf{v_2},\dots,\mathbf{v_n})$ 的张成,记为 $\mathrm{span}(\mathbf{v_1},\mathbf{v_2},\dots,\mathbf{v_n})$.

基 basis

若向量空间 $V$ 中向量组 $\mathfrak{B}$ 既是线性无关的又可以张成 $V$,则称其为 $V$ 的

$\mathfrak{B}$ 中的元素称为基向量。如果基中元素个数有限,就称向量空间为有限维向量空间,将元素的个数称作向量空间的维数。

性质

设 $\mathfrak{B}$ 是向量空间 $V$ 的基。则 $\mathfrak{B}$ 具有以下性质:

  • $V​$ 是 $\mathfrak{B}​$ 的极小生成集,就是说只有 $\mathfrak{B}​$ 能张成 $V​$,而它的任何真子集都不张成全部的向量空间。
  • $\mathfrak{B}$ 是 $V$ 中线性无关向量的极大集合,就是说 $\mathfrak{B}$ 在 $V$ 中是线性无关集合,而且 $V$ 中没有其他线性无关集合包含它作为真子集。
  • $V$ 中所有的向量都可以按唯一的方式表达为 $\mathfrak{B}$ 中向量的线性组合。

第三点尤其重要,感性的理解,基就是向量空间中的一个子集,它可以通过唯一的线性组合,来张成向量空间中所有的向量,这样就可以大大的缩小我们向量空间的大小。

线性相关性引理 Linear Dependent Lemma

如果 $(\mathbf{v_1},\mathbf{v_2}, \ldots, \mathbf{v}_n)$ 在 $V$ 中是线性相关的,并且 $\mathbf{v_1}\neq0$, 则有至少一个 $j\in{2,\dots, m}$ 使得下列成立:

  1. $v_j\in\mathrm{span}(\mathbf{v_1},\mathbf{v_2},\dots,\mathbf{v_{j-1}})$
  2. 如果从 $(\mathbf{v_1},\mathbf{v_2},\dots,\mathbf{v_n})$ 中去掉第 $j$ 项,则剩余向量组的张成仍然等于 $\mathrm{span}(\mathbf{v_1},\mathbf{v_2},\dots,\mathbf{v_n})$

证明

设 $(\mathbf{v_1},\mathbf{v_2},\dots,\mathbf{v_n})$ 在 $V$ 中是线性相关的,并且 $\mathbf{v_1}\neq\mathbf{0}$, 则有不全为 $0$ 的 $a_1,a_2,\dots,a_n\in F$,使得
$$
a_1\mathbf{v_1}+a_2\mathbf{v_2}
+\dots+a_m\mathbf{v_
m}=\mathbf{0}
$$

$a_2,a_3,\dots,a_n$ 不会全为 $0$ (因为 $\mathbf{v_1}\neq\mathbf{0}$ )。设 $j$ 是 ${2,\ldots,m}$ 中使得 $a_j\neq0$ 的最大者,那么
$$
\mathbf{v_j}=-\frac{a_1}{a_j}\mathbf{v_1}-\frac{a_2}{a_j}\mathbf{v_2}-\dots-\frac{a_{j-1}}{a_j}\mathbf{v}_{j - 1}
$$
这就有 1 成立.

为了证明 2,设 $\mathbf{u} \in \mathrm{span}(\mathbf{v_1},\dots,\mathbf{v_n})$, 则存在 $c_1,c_2,\dots,c_n\in F$, 使得
$$
\mathbf{u}=c_1\mathbf{v_1}+c_2\mathbf{v_2}+\dots+c_n\mathbf{v_n}
$$
在上面的等式中,可以用之前的等式右边来代替 $\mathbf{v_j}$. 这样 $\mathbf{u}$ 包含于从 $(\mathbf{v_0},\mathbf{v_1},\dots,\mathbf{v_n})$ 去掉第 $j$ 项的张成,因而 2 成立。

性质

设集合 $S$ 中最大的数在二进制意义下有 $L$ 位,我们使用一个 $[0\dots L]$ 的数组 $a$ 来储存线性基。

这种线性基的构造方法保证了一个特殊性质,对于每一个 $i$,$a_i$ 有以下两种可能:

  • $a_i=0$

    • 则只有满足 $j>i$ 的 $a_j$ 的第 $i$ 个二进制位可能为 $1$;
  • $a_i\neq 0$

    • 整个 $a​$ 数组中只有 $a_i​$ 的第 $i​$ 个二进制位为 $1​$;

    • $a_i$ 更高的二进制位一定为 $0$;

    • $a_i$ 更低的二进制位可能为 $1$;

流程

线性基是由空一个个加入的,记线性基为 $a$, 新加入的为 $t$ 。

逆序枚举 $t$ 的所有二进制位,对于每一个 $i$ :

  • 如果 $a_i\neq0$ ,则令 $t=t\oplus a_i$ 。

    为保证 $a$ 中只有 $a_i$ 的第 $i$ 位为 $1$ ,只有消去 $t$ 的第 $j$ 位上的 $1$ ,才可以继续插入。

  • 如果 $a_i=0$ ,则

    • 枚举 $j\in[0,i)$ ,如果 $t$ 的第 $j$ 位为 $1$ ,则令 $t=t\oplus a_k$ 。

      为保证 $a$ 中只有 $a_i$ 的第 $i$ 位为 $1$ ,只有消去 $t$ 的第 $j$ 位上的 $1$ ,才可以继续插入。

    • 枚举 $j\in(i,L]$ ,如果 $a_j$ 的第 $i$ 位为 $1$ ,则令 $a_j=a_j\oplus t$ 。

      为保证 $a_k,k\in(j,L]$ 中第 j 位为 $0$.

    • 令 $a_i=t$ ,至此,过程结束。

很明显,这一算法构造线性基的复杂度为 $O(n\log_2\max a_i)$

实现模板

最大异或和

给定由 $n$ 个数组成的一个可重集 $S$ , 求一个集合 $T\subseteq S$ , 使 $T_1\oplus T_2 \oplus\cdots\oplus T_{|T|}$ 最小。

$1\leq n\leq50,0\leq S_i\leq2^{ 50}$

先构造一个线性基,最大异或和即为线性基中的所有数的异或和。

最大异或和.cpp

K 小异或和

给定由 $n$ 个数组成的一个可重集 $S$ , 求一个集合 $T\subseteq S$ , 使 $T_1\oplus T_2 \oplus\cdots\oplus T_{|T|}$ 在 $S$ 的所有非空子集的不同的异或和中第 $k$ 小。

$1\leq n\leq50,0\leq S_i\leq2^{ 50}$

K 小异或和.cpp

应用