线性基

数学基础

向量空间 vector space

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

线性无关 linearly independent

对于向量空间中 V V V n n n 个元素的向量组 ( v 1 , v 2 , … , v n ) (\mathbf{v_1},\mathbf{v_2},\dots,\mathbf{v_n}) (v1,v2,,vn), 若存在不全为 0 0 0 的数 a i ∈ F a_i\in F aiF, 满足 a 1 v 1 + a 2 v 2 + ⋯ + a n v n = 0 a_1\mathbf{v_1}+a_2\mathbf{v_2}+\dots+a_n\mathbf{v_n}=0 a1v1+a2v2++anvn=0
则称这 n n n 个向量 线性相关,否则称为 线性无关

线性组合 linear combination

对于向量空间中 V V V n n n 个元素的向量组 ( v 1 , v 2 , … , v n ) (\mathbf{v_1},\mathbf{v_2}, \ldots, \mathbf{v}_n) (v1,v2,,vn), 其线性组合是如下形式的向量
a 1 v 1 + a 2 v 2 + ⋯ + a n v n a_1\mathbf{v_1}+a_2\mathbf{v_2}+\dots+a_n\mathbf{v_n} a1v1+a2v2++anvn
其中 a 1 , a 2 , … , a n ∈ F a_1,a_2,\dots,a_n\in F a1,a2,,anF

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

张成 span

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

基 basis

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

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

性质

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

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

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

线性相关性引理 Linear Dependent Lemma

如果 ( v 1 , v 2 , … , v n ) (\mathbf{v_1},\mathbf{v_2}, \ldots, \mathbf{v}_n) (v1,v2,,vn) V V V 中是线性相关的,并且 v 1 ≠ 0 \mathbf{v_1}\neq0 v1=0, 则有至少一个 j ∈ { 2 , … , m } j\in\{2,\dots, m\} j{2,,m} 使得下列成立:

  1. v j ∈ s p a n ( v 1 , v 2 , … , v j − 1 ) v_j\in\mathrm{span}(\mathbf{v_1},\mathbf{v_2},\dots,\mathbf{v_{j-1}}) vjspan(v1,v2,,vj1)
  2. 如果从 ( v 1 , v 2 , … , v n ) (\mathbf{v_1},\mathbf{v_2},\dots,\mathbf{v_n}) (v1,v2,,vn) 中去掉第 j j j 项,则剩余向量组的张成仍然等于 s p a n ( v 1 , v 2 , … , v n ) \mathrm{span}(\mathbf{v_1},\mathbf{v_2},\dots,\mathbf{v_n}) span(v1,v2,,vn)

证明

( v 1 , v 2 , … , v n ) (\mathbf{v_1},\mathbf{v_2},\dots,\mathbf{v_n}) (v1,v2,,vn) V V V 中是线性相关的,并且 v 1 ≠ 0 \mathbf{v_1}\neq\mathbf{0} v1=0, 则有不全为 0 0 0 a 1 , a 2 , … , a n ∈ F a_1,a_2,\dots,a_n\in F a1,a2,,anF,使得
a 1 v 1 + a 2 v 2 + ⋯ + a m v m = 0 a_1\mathbf{v_1}+a_2\mathbf{v_2} +\dots+a_m\mathbf{v_ m}=\mathbf{0} a1v1+a2v2++amvm=0

a 2 , a 3 , … , a n a_2,a_3,\dots,a_n a2,a3,,an 不会全为 0 0 0 (因为 v 1 ≠ 0 \mathbf{v_1}\neq\mathbf{0} v1=0 )。设 j j j { 2 , … , m } \{2,\ldots,m\} {2,,m} 中使得 a j ≠ 0 a_j\neq0 aj=0 的最大者,那么
v j = − a 1 a j v 1 − a 2 a j v 2 − ⋯ − a j − 1 a j v j − 1 \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} vj=aja1v1aja2v2ajaj1vj1
这就有 1 成立.

为了证明 2,设 u ∈ s p a n ( v 1 , … , v n ) \mathbf{u} \in \mathrm{span}(\mathbf{v_1},\dots,\mathbf{v_n}) uspan(v1,,vn), 则存在 c 1 , c 2 , … , c n ∈ F c_1,c_2,\dots,c_n\in F c1,c2,,cnF, 使得
u = c 1 v 1 + c 2 v 2 + ⋯ + c n v n \mathbf{u}=c_1\mathbf{v_1}+c_2\mathbf{v_2}+\dots+c_n\mathbf{v_n} u=c1v1+c2v2++cnvn
在上面的等式中,可以用之前的等式右边来代替 v j \mathbf{v_j} vj. 这样 u \mathbf{u} u 包含于从 ( v 0 , v 1 , … , v n ) (\mathbf{v_0},\mathbf{v_1},\dots,\mathbf{v_n}) (v0,v1,,vn) 去掉第 j j j 项的张成,因而 2 成立。

性质

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

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

  • a i = 0 a_i=0 ai=0
    • 则只有满足 j > i j>i j>i a j a_j aj 的第 i i i 个二进制位可能为 1 1 1;
  • a i ≠ 0 a_i\neq 0 ai=0
    • 整个 a ​ a​ a 数组中只有 a i ​ a_i​ ai 的第 i ​ i​ i 个二进制位为 1 ​ 1​ 1;

    • a i a_i ai 更高的二进制位一定为 0 0 0;

    • a i a_i ai 更低的二进制位可能为 1 1 1;

流程

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

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

  • 如果 a i ≠ 0 a_i\neq0 ai=0 ,则令 t = t ⊕ a i t=t\oplus a_i t=tai

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

  • 如果 a i = 0 a_i=0 ai=0 ,则

    • 枚举 j ∈ [ 0 , i ) j\in[0,i) j[0,i) ,如果 t t t 的第 j j j 位为 1 1 1 ,则令 t = t ⊕ a k t=t\oplus a_k t=tak

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

    • 枚举 j ∈ ( i , L ] j\in(i,L] j(i,L] ,如果 a j a_j aj 的第 i i i 位为 1 1 1 ,则令 a j = a j ⊕ t a_j=a_j\oplus t aj=ajt

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

    • a i = t a_i=t ai=t ,至此,过程结束。

很明显,这一算法构造线性基的复杂度为 O ( n log ⁡ 2 max ⁡ a i ) O(n\log_2\max a_i) O(nlog2maxai)

实现模板

最大异或和

给定由 n n n 个数组成的一个可重集 S S S , 求一个集合 T ⊆ S T\subseteq S TS , 使 T 1 ⊕ T 2 ⊕ ⋯ ⊕ T ∣ T ∣ T_1\oplus T_2 \oplus\cdots\oplus T_{|T|} T1T2TT 最小。

1 ≤ n ≤ 50 , 0 ≤ S i ≤ 2 50 1\leq n\leq50,0\leq S_i\leq2^{ 50} 1n50,0Si250

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

最大异或和.cpp

K 小异或和

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

1 ≤ n ≤ 50 , 0 ≤ S i ≤ 2 50 1\leq n\leq50,0\leq S_i\leq2^{ 50} 1n50,0Si250

K 小异或和.cpp

应用

你可能感兴趣的:(线性基)