数学基础
向量空间 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
ai∈F, 满足
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,…,an∈F
一组向量 线性无关 等价于 没有向量可用有限个其他向量的 线性组合 所表示.
张成 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} 使得下列成立:
- 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}}) vj∈span(v1,v2,…,vj−1)
- 如果从 ( 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,…,an∈F,使得
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=0a 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=−aja1v1−aja2v2−⋯−ajaj−1vj−1
这就有 1 成立.为了证明 2,设 u ∈ s p a n ( v 1 , … , v n ) \mathbf{u} \in \mathrm{span}(\mathbf{v_1},\dots,\mathbf{v_n}) u∈span(v1,…,vn), 则存在 c 1 , c 2 , … , c n ∈ F c_1,c_2,\dots,c_n\in F c1,c2,…,cn∈F, 使得
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] [0…L] 的数组 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=t⊕ai 。
为保证 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=t⊕ak 。
为保证 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=aj⊕t 。
为保证 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 T⊆S , 使 T 1 ⊕ T 2 ⊕ ⋯ ⊕ T ∣ T ∣ T_1\oplus T_2 \oplus\cdots\oplus T_{|T|} T1⊕T2⊕⋯⊕T∣T∣ 最小。
1 ≤ n ≤ 50 , 0 ≤ S i ≤ 2 50 1\leq n\leq50,0\leq S_i\leq2^{ 50} 1≤n≤50,0≤Si≤250
先构造一个线性基,最大异或和即为线性基中的所有数的异或和。
K 小异或和
给定由 n n n 个数组成的一个可重集 S S S , 求一个集合 T ⊆ S T\subseteq S T⊆S , 使 T 1 ⊕ T 2 ⊕ ⋯ ⊕ T ∣ T ∣ T_1\oplus T_2 \oplus\cdots\oplus T_{|T|} T1⊕T2⊕⋯⊕T∣T∣ 在 S S S 的所有非空子集的不同的异或和中第 k k k 小。
1 ≤ n ≤ 50 , 0 ≤ S i ≤ 2 50 1\leq n\leq50,0\leq S_i\leq2^{ 50} 1≤n≤50,0≤Si≤250