定义 ( F , V , + , ⋅ ) (F, V, +, \cdot) (F,V,+,⋅) 为向量空间,其中 F F F 为域, V V V 为集合, V V V 中元素称为向量, + + + 为向量加法, ⋅ \cdot ⋅ 为标量乘法,且运算满足 8 条公理(见维基百科)。
对于向量空间中 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 个向量 线性相关,否则称为 线性无关 。
对于向量空间中 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
一组向量 线性无关 等价于 没有向量可用有限个其他向量的 线性组合 所表示.
对于向量空间中 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).
若向量空间 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 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 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 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
先构造一个线性基,最大异或和即为线性基中的所有数的异或和。
最大异或和.cpp
给定由 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
K 小异或和.cpp