代数结构

这一部分介绍群、环和域这三种特殊的代数结构,本文主要内容是先讨论域 FF 上的线性空间的一般性质,然后代入 F=F2F=\mathbb{F}_2 讨论异或线性基特殊的性质。

首先给出一堆定义。

  1. A,BA,B 是两个集合,我们把集合

    A×B={(a,b)aA,bB}A\times B=\{(a,b)\mid a\in A,b\in B\}

    叫做 AABB直积

  2. AA 是集合,从 A×AA\times AAA 的映射

    f:A×AAf:A\times A\to A

    叫做集合 AA 上的一个(二元)运算

  3. 运算 \circ 满足结合律,是指

    a(bc)=(ab)c(a,b,cA)a\circ(b\circ c) = (a\circ b)\circ c(\forall a,b,c\in A)

  4. 运算 \circ 满足交换律,是指

    ab=ba(a,bA)a\circ b=b\circ a(\forall a,b\in A)

  5. 集合 GGGG 上的二元运算 \circ 构成一个,如果

    1. 运算 \circ 满足结合律;
    2. 存在幺元素 1G1\in G,使得对每个 xGx\in Gx1=1x=xx1=1x=x
    3. 对每个元素 xGx\in G,都存在 yGy\in Gxy=yx=1xy=yx=1

    如果二元运算 \circ 还具有交换律,称 GG阿贝尔群

    如果仅满足第一个条件,称 GG半群

    如果满足前两个条件,称 GG含幺半群

  6. 集合 RRRR 上两个二元运算组成的代数结构 (R,+,)(R,+,\circ) 构成一个,如果

    1. (R,+)(R,+) 是阿贝尔群,这个加法群的幺元素记作 00,叫做环 RR 的零元素;对每个元素 aRa\in R 的加法逆元记作 a-a;对于正整数 nn,记 nnaa 相加为 nana
    2. (R,)(R,\circ) 是半群,对于正整数 nn 和每个元素 aRa\in R,记 nnaa 相乘为 ana^n;如果 aa 有逆元,将它的逆元记作 a1a^{-1}
    3. 加法和乘法满足分配律,即对任意的 a,b,cRa,b,c\in R,有 a(b+c)=ab+ac,(b+c)a=ba+caa(b+c)=ab+ac, (b+c)a=ba+ca

    如果 RR 上的乘法具有交换律,那么称 RR交换环

    如果存在元素 1R1\in R,使得 aR,1a=a1=a\forall a\in R, 1a=a1=a,那么称 RR含幺环,元素 11 叫做 RR幺元素

  7. RR 为含幺交换环,并且 010\neq 1,并且每个非零元素均有乘法逆,那么称 RR

下面我们来根据这些定义证明一些简单的性质。

  1. 含幺半群 GG 中的幺元素是唯一的。

    证:设 1,1G1,1'\in G 均是幺元素,那么 11=1=111'=1=1'

  2. GG 中每个元素的逆元是唯一的。

    证:任取 xGx\in G,若 y,yGy,y'\in G 均是 xx 的逆元,则有 y=y1=y(xy)=(yx)y=yy'=y'1=y'(xy)=(y'x)y=y

  3. RR 中任意元 aa 满足 0a=a0=00a=a0=0

    证:0a=(0+0)a=0a+0a0a=(0+0)a=0a+0a,则 0a=00a=0,同理 a0=0a0=0

  4. RR 中任意元素 a,ba,b 满足 (a)b=a(b)=(ab)(-a)b=a(-b)=-(ab)(a)(b)=ab(-a)(-b)=ab

    证:ab+(a)b=(aa)b=0ab+(-a)b=(a-a)b=0a(b)+ab=a(b+b)=0a(-b)+ab=a(-b+b)=0,证明了第一个式子;(a)(b)=(a(b))=((ab))=ab(-a)(-b)=-(a(-b))=-(-(ab))=ab,证明了第二个式子。

  5. RR 中任意元素 ai,bja_i,b_j 满足 (i=1nai)(j=1mbj)=i=1nj=1maibj\left(\sum_{i=1}^n a_i\right)\left(\sum_{j=1}^m b_j\right)=\sum_{i=1}^n\sum_{j=1}^m a_ib_j

    证:利用数学归纳法,可以将分配律推广成

    (i=1nai)x=i=1naix,y(j=1mbj)=j=1mybj\left(\sum_{i=1}^n a_i\right) x= \sum_{i=1}^n a_ix,y\left(\sum_{j=1}^m b_j\right)=\sum_{j=1}^m yb_j

    利用这个结论即可证明原式。

  6. RR 中任意元素 a,ba,b 与正整数 nn 满足 (na)b=a(nb)=n(ab)(na)b=a(nb)=n(ab)

    证:(na)b=(i=1na)b=i=1nab=n(ab)(na)b=(\sum_{i=1}^n a)b=\sum_{i=1}^n ab=n(ab)a(nb)=a(i=1nb)=i=1nab=n(ab)a(nb)=a(\sum_{i=1}^n b)=\sum_{i=1}^n ab=n(ab)

线性空间

我们学习的线性空间一般是域 (C,+,×)(\mathbb{C},+,\times) 上的线性空间,下面我们来讨论一下一般的域 FF 下的线性空间。

定义

VV 是一个非空集合,FF 是一个域。如果有 V×VVV\times V\to V加法(将 (α,β)γ(\alpha,\beta)\mapsto \gamma 记作 α+β=γ\alpha+\beta=\gamma)与 F×VVF\times V\to V纯量乘法(将 (k,α)δ(k,\alpha)\mapsto \delta 记作 kα=δk\alpha=\delta),并且满足下述 88 条运算法则:α,β,γV,k,lF\forall \alpha,\beta,\gamma\in V,\forall k,l\in F 有:

  1. α+β=β+α\alpha+\beta=\beta+\alpha
  2. (α+β)+γ=α+(β+γ)(\alpha+\beta)+\gamma=\alpha+(\beta+\gamma)
  3. VV 中有一个元素,记作 00,使得 α+0=0\alpha+0=0,具有该性质的元叫做 VV零元
  4. 对于 αV\alpha\in V,存在 βV\beta\in V,使得 α+β=0\alpha+\beta=0,具有该性质的元叫做 α\alpha负元
  5. 1α=α1\alpha=\alpha,其中 11FF 的幺元;
  6. (kl)α=k(lα)(kl)\alpha=k(l\alpha)
  7. (k+l)α=kα+lα(k+l)\alpha=k\alpha+l\alpha
  8. k(α+β)=kα+kβk(\alpha+\beta)=k\alpha+k\beta

VV 是域 FF 上的一个线性空间

FF 上所有 nn 元有序组组成的集合 FnF^n,对于有序组的加法(对应分量相加)与纯量乘法(把 FF 的元素 kk 乘每一个分量),成为域 FF 上的一个线性空间,称它为域 FF 上的 nn向量空间

下面我们来根据 88 条运算法则证明一些简单的性质。

  1. VV 中零元是唯一的。

    证:设 01,020_1,0_2VV 中两个零元,则 01+02=01=020_1+0_2=0_1=0_2

  2. VV 中每个元素 α\alpha 的负元是唯一的。

    证:设 β1,β2\beta_1,\beta_2α\alpha 的负元,则 β1=β1+(α+β2)=(β1+α)+β2=β2\beta_1=\beta_1+(\alpha+\beta_2)=(\beta_1+\alpha)+\beta_2=\beta_2,今后记 α\alpha 的负元为 α-\alpha,并定义减法 αβ:=α+(β)\alpha-\beta:=\alpha+(-\beta)

  3. 对于 FF 中的零元 000α=0,αV0\alpha=0,\forall \alpha\in V,注意等号右边的 00VV 中的零元。

    证:0α=(0+0)α=0α+0α0\alpha=(0+0)\alpha=0\alpha+0\alpha,则 0α=00\alpha=0

  4. 对于 0V0\in Vk0=0,kFk0=0,\forall k\in F

    证:k0=k(0+0)=k0+k0k0=k(0+0)=k0+k0,则 k0=0k0=0

  5. 如果 kα=0,kF,αVk\alpha=0,k\in F,\alpha\in V,那么 k=0k=0α=0\alpha=0

    证:假设 k0k\neq 0,则 α=1α=k1(kα)=0\alpha=1\alpha=k^{-1}(k\alpha)=0,于是 k0k\neq 0α0\alpha\neq 0 不能同时成立。

  6. 对于 FF 中的幺元 11(1)α=α,αV(-1)\alpha=-\alpha,\forall \alpha\in V

    证:α+(1)α=1α+(1)α=(11)α=0α=0\alpha+(-1)\alpha=1\alpha+(-1)\alpha=(1-1)\alpha=0\alpha=0,于是 (1)α=α(-1)\alpha=-\alpha

线性相关与线性无关

VV 是域 FF 上的一个线性空间,则称向量组 α1,α2,,αs\alpha_1,\alpha_2,\dots,\alpha_s 线性无关,当且仅当 k1α1+k2α2++ksαs=0k_1\alpha_1+k_2\alpha_2+\dots+k_s\alpha_s=0 可以推出 k1=k2==ks=0k_1=k_2=\dots=k_s=0;反之称为线性相关

如果 VV 中的一个向量 β\beta 可以由向量组 α1,α2,,αs\alpha_1,\alpha_2,\dots,\alpha_s 线性表示,称 β\beta 可以由该向量组线性表出

下面我们证明两个定理。

  1. 设向量组 β1,β2,,βr\beta_1,\beta_2,\dots,\beta_r 中每一个向量都可以由向量组 α1,α2,,αs\alpha_1,\alpha_2,\dots,\alpha_s 线性表出,如果 r>sr>s,那么 β1,β2,,βr\beta_1,\beta_2,\dots,\beta_r 线性相关。

    证:将 β\betaα\alpha 线性表出,列 i=1rxiβi=0\sum_{i=1}^rx_i\beta_i=0,将每一个 α\alpha 的系数提取出来令其为 00,此时有 ss 个方程,rr 个未知数。由于这是一个齐次线性方程组,那么根据线性方程组的知识,s<rs<r 可以推出一定有非零解,于是 β\beta 线性相关。

  2. 设向量组 α1,α2,,αs\alpha_1,\alpha_2,\dots,\alpha_s 线性无关,则 kF,1ijs\forall k\in F,\forall 1\le i\neq j\le s,有 α1,α2,,αi+kαj,,αs\alpha_1,\alpha_2,\dots,\alpha_i+k\alpha_j,\dots,\alpha_s 线性无关。

    证:设 k1α1+k2α2++(kiαi+kikαj)++ksαs=0k_1\alpha_1+k_2\alpha_2+\dots+(k_i\alpha_i+k_ik\alpha_j)+\dots+k_s\alpha_s=0,可以推出 k1=0,k2=0,,ki=0,kj+kik=0,,ks=0k_1=0,k_2=0,\dots,k_i=0,k_j+k_ik=0,\dots,k_s=0,推出 ki=kj=0k_i=k_j=0。易证反之亦成立。

  3. 设向量组 α1,α2,,αs\alpha_1,\alpha_2,\dots,\alpha_s 线性无关,若 β\beta 能被向量组 α\alpha 线性表出,则表出方式唯一。

    证:设有两种表出方式,移项容易解得这两种表出方式的系数是相等的。

下文中我们将主要讨论向量空间 FnF^n 上的性质。

向量空间的子空间

FnF^n 的一个非空子集 UU 如果满足:

  1. α,βU\alpha,\beta\in U,则 α+βU\alpha+\beta\in U
  2. αU\alpha\in UkKk\in K,则 kαUk\alpha\in U

那么称 UUFnF^n子空间

容易验证,FnF^n 中向量组 α1,α2,,αs\alpha_1,\alpha_2,\dots,\alpha_s 的所有线性组合组成的集合 WWFnF^n 的一个子空间,将其称为该向量组张成的子空间,记作 <α1,α2,,αs>\left<\alpha_1,\alpha_2,\dots,\alpha_s\right>

向量空间及其子空间的基

UUFnF^n 的一个子空间,如果 α1,α2,,αrU\alpha_1,\alpha_2,\dots,\alpha_r\in U 并且满足:

  1. α1,α2,,αr\alpha_1,\alpha_2,\dots,\alpha_r 线性无关;
  2. UU 中每一个向量都可以由 α1,α2,,αr\alpha_1,\alpha_2,\dots,\alpha_r 线性表出;

那么称 α1,α2,,αr\alpha_1,\alpha_2,\dots,\alpha_rUU 的一个基。

显然,ε1=(1,0,,0),ε2=(0,1,,0),,εn=(0,0,,1)\varepsilon_1=(1,0,\dots,0),\varepsilon_2=(0,1,\dots,0),\dots,\varepsilon_n=(0,0,\dots,1)FnF^n 的一个基,称它为标准基

下面我们证明几个定理。

  1. FnF^n 的任一非零子空间 UU 都有一个基。

    这个定理的证明是构造性的。

    先取 0α1U0\neq \alpha_1 \in U,若 <α1>=U\left<\alpha_1\right>=U,那么 α1\alpha_1 是一组基。否则,取 α2∉<α1>\alpha_2\not\in\left<\alpha_1\right>,若 <α1,α2>=U\left<\alpha_1,\alpha_2\right>=U 那么 α1,α2\alpha_1,\alpha_2 是一组基。

    这样执行下去,每一个向量都不能被前面的向量线性表出,据此容易证明得到的向量组是线性无关的。

    并且这样最多会执行 nn 步。

    反证法:假设执行了 n+1n+1 步,因为标准基的大小为 nn,那么 n+1n+1 个向量可以被标准基表出,根据"线性相关与线性无关"下的定理 1,这 n+1n+1 个向量线性相关。又因为前 nn 个向量线性无关,容易得到 αn+1\alpha_{n+1} 一定可以被前面的 nn 个向量表出,这违背了取向量的方法。

  2. FnF^n 的非零子空间 UU 的任意两个基所含向量个数相等。

    任意两个基都是线性无关,根据"线性相关与线性无关"下的定理 1 的逆否命题,可以得到这两个基所含向量个数相等。将基所含向量的个数记为 dimU\dim U

  3. dimU=r\dim U=r,则 UU 中任意 r+1r+1 个向量都线性无关。

    任取一组基 α1,α2,,αr\alpha_1,\alpha_2,\dots,\alpha_r,再任取 r+1r+1 个向量 β1,β2,,βr+1\beta_1,\beta_2,\dots,\beta_{r+1}。由于向量组 β\beta 可以被向量组 α\alpha 线性表出,且 r+1>rr+1>r,推出向量组 β\beta 线性相关。

  4. dimU=r\dim U=r,则 UU 中任意 rr 个线性无关的向量都是 UU 的一个基。

    任取 rr 个线性无关的向量,再取一个向量 α\alpha,根据定理 3 可以推出 α\alpha 可以被之前取的 rr 个向量线性表出,推出任取 rr 个线性无关的向量都构成 UU 的一个基。

因此,如果给定了 ss 个向量 α1,α2,,αs\alpha_1,\alpha_2,\dots,\alpha_s,并且 U=<α1,α2,,αs>U=\left<\alpha_1,\alpha_2,\dots,\alpha_s\right>,我们只需要类比定理 1 的构造性证明,就能构造出一个基。

异或线性基

算法竞赛中,我们可以将 uint64 的异或运算看成 F264\mathbb{F}_2^{64} 的加法运算,于是异或线形基就指 F2\mathbb{F}_2 上的向量空间的某一子空间的基,其中 F2=(Z2,+,×)\mathbb{F}_2=(\mathbb{Z}_2,+,\times)

接下来介绍线性基的贪心构造法,下面设 0α1,α2,,αnF2640\neq \alpha_1,\alpha_2,\dots,\alpha_n\in \mathbb{F}_2^{64},类比"向量空间及其子空间的基"下定理 1 的构造方式构造出一组线性基。

首先,在线性基 BB 中加入 α1\alpha_1,并记录下它的最高位。

对于每一个 αi\alpha_i,我们自高向低遍历每一位。如果当前位在 BB 中有对应的向量 β\beta,那么 αiαi+β\alpha_i\gets \alpha_i+\beta,即把当前位消掉;否则,若 αi0\alpha_i\neq 0,将 αi\alpha_i 加入 BB,并记录它的最高位。

由"线性相关与线性无关"下的定理 2 知,我们的操作不会改变 αi\alpha_iBB 中向量的线性相关性,并且这样构造能够保证每一个位置至多只会有一个向量。

这样的构造方式能够保证构造出的 BB 中每一个 αi\alpha_i 都不能被 αj,j<i\alpha_j,j<i 线性表示,也能够保证不在 BB 中的每一个 αi\alpha_i 都能够被 αj,j<i\alpha_j,j<i 线性表示。因此 BB 是一个线性无关的向量组,并且每一个 αi\alpha_i 都能够被 BB 线性表出,因此 BB<α1,α2,,αn>\left<\alpha_1,\alpha_2,\dots,\alpha_n\right> 的一个基。

BB 中的元素数量为 B|B|,那么这个基能表示出 2B2^{|B|} 个互不相同的向量,实际问题中关于能否表出 00 我们应当特殊讨论。

[HDU 3949] XOR

本题求第 kk 小,我们先贪心构造出一个线性基 BB,然后从高位向低位考虑 BB 中的向量。对于每一个向量,设最高位比它的最高位低的向量有 mm 个。

由线性表出的唯一性,我们知道,当前向量选或不选都分别对应着 2m2^m 个互不相同的向量。

因此,如果选择使答案的当前位为 11,那么就舍掉了 2m2^m 个当前位为 00 的向量,这些向量都一定比当前的答案要小。

所以按照这种贪心方式就能够正确地求出第 kk 小。

AC Code

[ICPC2025 Shanghai G] Gemcrate

首先,如果 mm 是一个可行的答案,分两种情况讨论:

  1. 如果 mm 是奇数,那么我把 B1,B2,,BmB_1,B_2,\dots,B_m 全部异或起来,答案一定不劣;
  2. 如果 mm 是偶数,那么我把 B1,B2,,BmB_1,B_2,\dots,B_m 任意分成两组,答案一定不劣。

所以我们只需要考虑分一组和两组,一组的情况是显然的,下面讨论两组。

统计所有位置出现次数,如果这一位能够出现在答案中,那么它一定是两组均有奇数个,所以我们把出现次数是奇数的位直接抹掉。

然后把处理之后的数据加入线性基,从大到小贪心即可。

AC Code

[JSCPC2025 B] Integer Generator

本题加大力度地考查了位运算的性质,不过我们从抽象代数的角度去思考是比较自然的。

首先,位运算关于每一个位独立,我们可以认为运算是域 F2\mathbb{F}_2 下的运算,进而推广到整数。

那么,容易看出 and\texttt{and} 就是乘法,xor\texttt{xor} 就是加法,or\texttt{or} 类似于乘法,具体地:

or:F2×F2F2,(x,y)1(1x)(1y)=x+yxy=x+y+xy\texttt{or}:\mathbb{F}_2\times \mathbb{F_2}\to \mathbb{F}_2,\quad (x,y)\mapsto 1-(1-x)(1-y)=x+y-xy=x+y+xy

推广到整数,为了与一般的运算区别,这里使用 ,\oplus,\otimes 代替 and,xor\texttt{and},\texttt{xor},我们有 xory=xy(xy)x\operatorname{or}y=x\oplus y\oplus (x\otimes y)

类似地,自然也有分配律 (xy)z=(xz)(yz)(x\oplus y)\otimes z=(x\otimes z)\oplus (y\otimes z)

因此,本题可以认为只存在按位与和异或运算即可,并且根据分配律,我们可以认为最终的表示方式总是异或运算最后进行。

首先对给定的 nn 个数字求出一个线性基 BB,假设存在一种表出 xx 的方式,我们把其中的 aia_i 都替换成线性基中的元素,它恰好是形如 c1c2cmc_1\oplus c_2\oplus \dots\oplus c_m 的形式,其中 cic_i 是某些线性基中的某些元素按位与。

进一步地,如果这个线性基满足 x,yB\forall x,y\in B,都有 xyx\otimes y 能被 BB 表出,即对按位与运算封闭,那么上面说的 cic_i 就是线性基的元素。

根据题目的数据范围,这个线性基张成的空间是 F230\mathbb{F}_2^{30} 的一个子空间,线性基至多只会有 3030 个元素。

也就是说,我们可以暴力地对 BB 进行扩张,设 VV 是值域,直接 O(log2V)O(\log^2 V) 地枚举每一对元素,然后 O(logV)O(\log V) 检查是否能被 BB 表出。如果都能被表出,那么已经封闭;如果存在不能被表出的元素,那么至少会有一个不能被表出的元素,于是这种循环至多会执行 O(logV)O(\log V) 次。即扩张的复杂度是 O(log4V)O(\log^4 V)

我们只需要扩张之后构造出一个方案即可,所以这里用一步高斯消元解异或方程组,是 O(log3V/ω)O(\log^3V/\omega) 的,因此最终的复杂度是 O(nlogV+log4V)O(n\log V+\log^4 V)

AC Code