抽象代数学习笔记
标题其实是假的,这只是 yhx 神仙的集训队论文的一半的学习笔记而已(所以只有群论
环和域可能在 OI 里用处就不大了(毕竟两个运算还是复杂一些
群论 (group)
群:封闭,结合,单位元,逆。
实际上群有三个定义六个性质,有兴趣的可以搜一下(
交换群:群,交换。
- \(\text{mod} \ m\) 意义下加法构成 \(m\) 阶循环群 \(Z_m\)。
- 所有 \(n!\) 个 \(n\) 元置换构成 \(n\) 元对称群 \(S_n\)。
- 所有 \(\lceil\frac{n!}2\rceil\) 个 \(n\) 元偶置换构成 \(n\) 元交错群 \(A_n\)。
- 对于正 \(n\) 边形,翻转/旋转置换称为 \(2n\) 阶二面体群 \(D_{2n}\)。
生成子群:对于群 \((G,\circ)\) 和 \(\varnothing\ne S\subseteq G\),包含 \(S\) 的所有子群的交称为 \(S\) 在 \(G\) 中生成的子群,记做 \(\langle S\rangle\)。
元素的阶:对于群 \(G\) 和其元素 \(a\in G\),\(|\langle a\rangle|=|a|\)。
陪集:对于群 \(G\) 和其子群 \(H\le G\),和元素 \(g\in G\),定义(左)陪集 \(gH=\{g\circ h|h\in H\}\),同理可以定义右陪集。
定理 2.1.1:对于子群 \(H\le G\),导出的陪集完全相同或交集为空。
定理 2.1.2:对于有限群 \(G\) 及其子群 \(H\le G\),有 \(|G|=|H|\cdot [G:H]\),其中 \([G:H]\) 表示 \(H\) 可以导出的陪集个数。
置换群:\(n\) 元对称群 \(S_n\) 的子群。
染色:\(n\) 元染色指对集合 \(\{1,2,\dots,n\}\) 的每个元素分配一个物品的分配方案。用 \(\mathbf c\) 表示一个染色,\(\mathbf c[i]\) 表示该染色中 \(i\) 位置的物品,\(\mathcal C\) 表示所有染色的集合。
置换作用于染色:对于置换 \(f\in S_n\) 和染色 \(\mathbf c\in \mathcal C\),定义 \((f\cdot\mathbf c)[i]=c[f^{-1}(i)]\)。
容易看出 \(e\cdot\mathbf c=\mathbf c\),\((f\circ g)\cdot \mathbf c=f\cdot(g\cdot\mathbf c)\)。
广义染色:对于群 \(G\) 和全集 \(\mathcal C\),定义运算 \(G\times \mathcal C\rightarrow\mathcal C\),满足
- \(e\cdot \mathbf c=\mathbf c\)。
- \((f\circ g)\cdot\mathbf c=f\cdot(g\cdot\mathbf c)\)。
则称 \(\mathcal C\) 是广义染色集合,\(\mathbf c\in\mathcal C\) 是广义染色。
轨道:\(G\cdot\mathbf c=\{g\cdot\mathbf c\mid g\in G\}\)。
稳定子群:\(G_{\mathbf c}=\{g\in G\mid g\cdot\mathbf c=\mathbf c\}\)。
容易发现稳定子群是子群(
定理 2.2.1 (轨道-稳定子群定理):\(|G\cdot\mathbf c|\cdot|G_{\mathbf c}|=|G|\)。
proves
证明:考虑 \(g\in G\),对于左陪集 \(gG_{\mathbf c}\) 中的元素 \(f=g\circ h_0\),有 \(f\cdot\mathbf c=g\cdot(h_0\cdot\mathbf c)=g\cdot\mathbf c\)。因此左陪集 \(gG_{\mathbf c}\) 作用于 \(\mathbf c\) 产生相同的染色。
考虑 \(g_1,g_2\in G\),\(g_1\cdot\mathbf c=g_2\cdot\mathbf c\Rightarrow (g_1^{-1}\circ g_2)\cdot\mathbf c=g_1^{-1}\cdot(g_2\cdot\mathbf c)=g_1^{-1}\cdot(g_1\cdot\mathbf c)=\mathbf c\)。所以 \(g_1^{-1}\circ g_2\in G_{\mathbf c}\),所以 \(g_2\in g_1G_{\mathbf c}\),根据定理 2.1.1,\(g_1G_{\mathbf c}=g_2G_{\mathbf c}\)。
所以 \(G_{\mathbf c}\) 导出的每个陪集作用于 \(\mathbf c\) 得到不同的染色,所以陪集数量就等于 \(G\) 作用于 \(\mathbf c\) 得到的染色数,所以 \([G:G_\mathbf c]=|G\cdot\mathbf c|\),根据定理 2.1.2,Q.E.D。
不动点:\(X^g=\{\mathbf c\in X\mid g\cdot\mathbf c=\mathbf c\}\)。
等价染色:对于群 \(G\) 和两个染色 \(\mathbf c_1,\mathbf c_2\),定义 \(\mathbf c_1\) 和 \(\mathbf c_2\) 等价当且仅当 \(\exist g\in G,g\cdot\mathbf c_1=\mathbf c_2\)。
容易发现 \(\mathbf c_1\) 与 \(\mathbf c_2\) 等价当且仅当 \(\mathbf c_2\in G\cdot\mathbf c_1\),或 \(G\cdot\mathbf c_1=G\cdot\mathbf c_2\)。
则等价类与轨道对应,定义 \(X/G\) 表示轨道集合。
定理 2.2.2 (Burnside 引理):\(|G||X/G|=\sum_{g\in G}|X^g|\)。
proves
证明:考虑 \(\sum_{g\in G}\sum_{\mathbf c\in X}[g\cdot\mathbf c=\mathbf c]\)。
枚举置换,贡献为不动点数量,即为 \(\sum_{g\in G}|X^g|\)。
枚举染色,贡献为稳定子群大小,即为 \(\sum_{\mathbf c\in X}|G_\mathbf c|=|G|\cdot\sum_{\mathbf c\in X}\frac 1{|G\cdot\mathbf c|}\)。
每个轨道内的元素贡献 1/轨道大小,所以每个轨道贡献 \(1\),即为 \(|G||X/G|\)。Q.E.D.
Polya 计数
置换的循环指标:对于 \(n\) 元置换 \(g=(a_{11}a_{12}\dots a_{1L_1})\dots(a_{y1}a_{y2}\dots a_{yL_y})\),定义它的循环指标是 \(\prod t_{L_i}\),其中 \(t_1,t_2,\dots,t_n\) 为形式变元。
置换群的循环指标:对于置换群 \(G\),定义它的循环指标为群中所有置换的指标的平均值,记做 \(Z_G(\mathbf t)\)。
定理 2.3.1 (Polya 定理) 定义 \(f(t)=\sum_{w\ge 0}f_wt^w\),其中 \(f_w\) 表示权值为 \(w\) 的颜色数量。定义染色 \(\mathbf c\) 的权值 \(\omega(\mathbf c)=\sum_{i=1}^n\omega(\mathbf c[i])\)。定义 \(F(t)\) 表示在 \(G\) 的作用下每种权值的染色的不同轨道数的生成函数。则
定理 2.3.2 (广义 Burnside 引理)
其中每个置换 \(g\in G\) 有权值 \(\omega(g)\),子群的权值 \(\omega(G_O)=\sum_{g\in G_O}\omega(g)\)。
证明:考虑 \(\sum_{g\in G}\sum_{\mathbf c\in X}[g\cdot\mathbf c=\mathbf c]\omega(g)\)。
推论 2.3.1 (Polya 容斥) 在定理 2.3.2 中取 \(\omega(g)=\text{sgn}(g)\) 即可得到
【ZJOI2018】树
题目描述:给定正整数 \(n,k\) 和质数 \(p\)。设 \(\mathcal T\) 是所有以 \(1\) 为根的 \(n\) 个点的带标号树构成的集合,\(E_1,E_2,\dots,E_{\lambda}\) 是同构等价类,求 \(\dfrac{\sum_{i=1}^{\lambda}|E_i|^k}{n!^k}\bmod p\)。
数据范围:\(n\le 2000,k\le 10^9,10^8<p<10^9\)。
solution
设有根无标号树的组合类为 \(\mathcal T\),考虑 \(\alpha\in\mathcal T\),设其形成的等价类个数为 \(\omega(\alpha)\)。
对于两个等价类定义笛卡尔积,容易发现 \(\omega(t_1\times t_2)=\omega(t_1)\omega(t_2)\binom{|t_1|+|t_2|}{|t_1|}\)。
为了用生成函数描述,设 \(T(\mathcal A;z)=\sum_{\alpha\in\mathcal A}\left(\frac{\omega(\alpha)}{|\alpha|!}\right)^kz^{|\alpha|}\),所求即为 \([z^n]T(\mathcal A;z)\)。
容易发现 \(T(\mathcal A+\mathcal B)=T(\mathcal A)+T(\mathcal B),T(\mathcal A\times\mathcal B)=T(\mathcal A)T(\mathcal B)\)。
然后看回 \(\mathcal T\),众所周知 \(\mathcal T^{\square}=\text{MSET}(\mathcal T)\),其中 \(\mathcal T\) 为 \(\mathcal T^{\square}\) 上加一个固定标号的根,也即 \([z^n]T(\mathcal T)=\frac 1{n^k}[z^{n-1}]T(\mathcal T^{\square})\)。然后就可以推柿子了:
发现这里的次数有变化,所以考虑再加一维,使次数可以变动。
乘法定义为 \(z\) 卷积,\(u\) 点积。然后就可以得到:
然后差不多乱搞搞就可以 \(O(n^2)\) 算了?
然后看 Polya 计数的方法,也是算同样的答案:各等价类大小的 \(k\) 次方之和。
设 \(f_n\) 表示 \(n\) 个点时的答案,\(g_{i,s}\) 表示所有树大小 \(\le i\),总和 \(=s\) 的森林对应的答案,则 \(f_i=g_{i-1,i-1}\),初值为 \(g_{1,s}=1\)。
转移考虑枚举当前加入了 \(d\) 个大小为 \(i\) 的树,即为
而 \(I_{i,d}\) 表示所有 \(d\) 棵大小为 \(i\) 的树构成的带标号有根森林的答案......
然后一个字都看不懂啊啊啊啊啊
u1s1,想起来当时做这题的时候,Euler 变换有 Polya 的推法,也有生成函数的推法,也就是解析组合(还可以更高大上地叫做组合结构符号化)
要理解群论计数还是好烧脑子,不如多练练上面那种做法(就是不知道适用范围怎么样了
群的判定和表示
不变子群:对于群 \((G,\circ)\) 及子群 \(H\le G\),若 \(g\in G,h\in H\Rightarrow g\circ h\circ g^{-1}\in H\),则称 \(H\) 是 \(G\) 的不变子群,记做 \(H\unlhd G\),此时若 \(H\ne G\) 则 \(H\) 是 \(G\) 的真不变子群,记做 \(H\lhd G\)。
商群:对于群 \((G,\circ)\) 及不变子群 \(N\),在 \(N\) 的所有陪集 \(G/N\) 上定义运算 \(\cdot\) 满足
则称 \((G/N,\cdot)\) 为 \(G\) 对 \(N\) 的商群。
可以手算验证一下,考虑 \(h_1,h_2\in H,a,b\in G\),
后面那一大坨显然 \(\in N\),也就是说 \((aN)\circ(bN)\subseteq (a\circ b)N\)。
同态:对于群 \((G,\circ),(H,\cdot)\),若映射 \(f:G\rightarrow H\) 满足
则称 \(f\) 是 \(G\) 到 \(H\) 的同态映射,简称同态。
当 \(f\) 是单射/满射/双射 时,称为单同态/满同态/同构。
核:设 \(f\) 是 \(G\) 到 \(H\) 的同态,\(e_H\) 是 \(H\) 的单位元,则集合
称为 \(f\) 的核,记做 \(\ker f\)。
显然 \(\ker f\) 是不变子群。
定理 3.1.1 (群同态基本定理) 设 \(f\) 是 \((G,\circ)\) 到 \((H,\cdot)\) 的满同态,则 \(G/\ker f\) 与 \(H\) 同构。
proves
证明:设 \(K=\ker f\),定义 \(\phi:G/K\rightarrow H\),其中 \(\phi(gK)=f(g)\)。
显然 \(\phi\) 是映射,现在考虑证明 \(\phi\) 是同构。
- \(gK,hK\in G/K\Rightarrow \phi((g\circ h)K)=f(g\circ h)=f(g)\cdot f(h)=\phi(gK)\cdot\phi(hK)\)。所以 \(\phi\) 是同态。
- 若 \(\phi(gK)=\phi(hK)\),则 \(f(g)=f(h)\Rightarrow f(g\circ h^{-1})=f(g)\cdot f(h^{-1})=f(g)\cdot f(h)^{-1}=e_H\),所以 \(g\circ h^{-1}\in K\Rightarrow gK=hK\),所以 \(\phi\) 是单射。
- \(\forall h\in H,\exist g\in G,f(g)=h\),所以 \(\phi(gK)=f(g)=h\),所以 \(\phi\) 是满射。
综上,\(\phi\) 是双同态,所以 \(G/K\) 与 \(H\) 同构。
定理 3.1.2 (群同构第三定理) 设 \(N\) 是 \(G\) 的不变子群,则
- \(N\le H\le G\Leftrightarrow H/N\le G/N\)。
- \(N\le H\unlhd G\Leftrightarrow H/N\unlhd G/N\Rightarrow \frac{G/N}{H/N}\cong G/H\)。
群的判定
题目描述:给定 \(n\times n\) 的乘法表,判断它是否是群。
封闭性、单位元、逆元都很好检验,最重要的是结合律。
引理 3.2.1 给定 \(n\) 阶有限群 \(G\),存在 \(S\subseteq G\) 使得 \(|S|\le\lfloor\log_2 n\rfloor\),且 \(G=\langle S\rangle\)。
proves
证:定义子群链 \(\{e\}=G_0\le G_1\le\dots\le G_k=G\),其中 \(G_i=\langle\{g_1,g_2,\dots,g_i\}\rangle\)。
构造方法如下:设我们已经知道 \(G_0,G_1,\dots,G_{i-1}\),现在要知道 \(G_i\)。若 \(G_{i-1}=G\) 则完成构造,否则任取 \(g_i\in G\backslash G_{i-1}\),令 \(G_i=\langle G_{i-1}\cup\{g_i\}\rangle\),根据消去律,\(|G_i|\ge 2|G_{i-1}|\),所以 \(n\ge 2^k|G_0|\),即 \(k\le\lfloor\log_2 n\rfloor\)。
引理 3.2.2 设 \((G,\circ)\) 满足封闭、单位元、逆元,\(G=\langle S\rangle\),则 \(G\) 满足结合律 \(\Leftrightarrow(s\in S,g,h\in G\Rightarrow (g\circ s)\circ h=g\circ(s\circ h))\)。
proves
证:\(\Rightarrow\) 显然,考虑 \(\Leftarrow\)。
设 \(A=\{s|\forall g,h\in G,(g\circ s)\circ h=g\circ (s\circ h)\}\),则 \(a,b\in A\Rightarrow (g\circ(a\circ b))\circ h=((g\circ a)\circ b)\circ h=(g\circ a)\circ (b\circ h)=g\circ (a\circ (b\circ h))=g\circ((a\circ b)\circ h)\Rightarrow a\circ b\in A\),因为 \(S\subseteq A\),由该结论可得 \(\langle S\rangle=G\subseteq A\),即 \(G\) 满足结合律。
使用这个方法就可以在 \(O(n^2\log n)\) 的时间复杂度内判断结合律。
对于群 \(G\) 及其元素 \(g\in G\),定义映射 \(\lambda_g(x)=g\circ x\),则 \(\lambda_g(x)\) 是双射,且 \(\lambda_g(\lambda_h(x))=\lambda_{g\circ h}(x)\),\(\lambda_g(x)\) 与 \(\lambda_{g^{-1}}(x)\) 互为逆映射,且 \(\lambda_g\) 是一个 \(G\) 上的置换,而 \(\{\lambda_g\mid g\in G\}\) 构成了一个置换群,即 \(|G|\) 元对称群的子群。
定理 3.3.1 (Cayley 定理) 每个 \(n\) 阶有限群都同构于一个不超过 \(n\) 元的置换群。
UOJ154【UR #10】列队
题目描述:给定群 \(G\) 和正整数 \(n\),求 \(G\) 到 \(n\) 元对称群 \(S_n\) 的单同态个数\(\bmod 998244353\)。\(T\) 组数据。
数据范围:\(T\le 10,|G|\le 30,n\le 1000\)。
solution
对于群 \(G,H\),设 \(G\) 到 \(H\) 的同态数量为 \(\text{homo}(G,H)\),单同态数量为 \(\text{mono}(G,H)\)。
考虑一个同态 \(f:G\rightarrow H\),设 \(K=\ker f\),则 \(G/K\) 与 \(\text{im} \ f\) 之间存在同构 \(\phi\),则将同构 \(\phi\) 的陪域扩展到 \(H\) 就得到了 \(G/K\) 到 \(H\) 的单同态。由此可得,\(G\) 到 \(H\) 的每个同态都对应到 \(G/N\) 到 \(H\) 的一个单同态,其中 \(N\) 是 \(G\) 的不变子群。
现在就可以转化为计算若干个 \(\text{homo}(G,H)\) 的子问题。
考虑给定群 \(G\) 计算到 \(S_n\) 的同态个数。对于置换群 \(H=\text{im} \ f\),定义 \(i\) 的特征染色 \(\chi_i\) 为 \(i\) 位置为黑色,其他位置为白色。则 \(\forall i\in[1,n]\),\(H\cdot \chi_i\) 中黑色出现位置的集合,构成了 \(\{1,2,\dots,n\}\) 的一个划分。
考虑其中一个集合 \(A\),而 \(|A|=k\),不妨设 \(1\in A\),则 \(|H\cdot\chi_1|=k\),根据轨道-稳定子群定理,\(H_{\chi_1}=\frac{|H|}{|H\cdot\chi_1|}=\frac{|H|}k\)。根据同态的性质,\(H_{\chi_1}\) 的原象是 \(G\) 的一个 \(\frac{|G|}k\) 阶子群。感性理解一下???
然而我们要求的是 \(f\) 的个数,所以要用 \(G\) 的结构表示 \(f\)。
容易发现划分的各个集合之间互不影响,只需要对应好然后给划分的元素标好号即可。
考虑 \(1\) 所在的划分,假设是 \(\{2,3,\dots,k\}\),在 \(G\) 中搞一个大小为 \(\frac{|G|}k\) 的子群 \(S\),令它的象为 \(H_{\chi_1}\),那么 \(S\) 导出的 \(k\) 个左陪集作用于 \(\chi_1\) 之后将黑色分别移动到 \(1,2,\dots,k\)。
设这 \(k\) 个左陪集为 \(S,g_2S,\dots,g_kS\),不妨设 \(g_iS\) 将黑色移到 \(i\),这里的标号有 \((k-1)!\) 种。
然后发现确定好 \(g_i\) 之后就确定好了所有置换,具体来说,\(g\in G,s\in S\Rightarrow g(j)=g((g_j\circ s)(1))=(g\circ g_j\circ s)(1)=(g\circ g_j)(1)\)。也就是说 \(g(j)\) 由 \(g\circ g_j\) 唯一确定,与 \(s\) 没有关系。
现在就可以直接计数了,每个划分的集合是带标号无序组,所以是 EGF 的 exp 形式,
#include<bits/stdc++.h>
#define PB emplace_back
#define MP make_pair
#define fi first
#define se second
using namespace std;
typedef long long LL;
typedef pair<int, int> pii;
const int N = 30, M = 1003, mod = 998244353;
template<typename T>
void read(T &x){
int ch = getchar(); x = 0; bool f = false;
for(;ch < '0' || ch > '9';ch = getchar());
for(;ch >= '0' && ch <= '9';ch = getchar()) x = x * 10 + ch - '0';
if(f) x = -x;
}
template<typename T>
bool chmax(T &a, const T &b){if(a < b) return a = b, 1; return 0;}
template<typename T>
bool chmin(T &a, const T &b){if(a > b) return a = b, 1; return 0;}
void qmo(int &x){x += x >> 31 & mod;}
int T, n, m, e, A[N][N], inv[N], sta[M], siz[M], fr, re, q[N], f, r, iv[M], F[M];
set<int> S; bool reg[M];
bool regu(int x){
for(int i = 0;i < m;++ i)
for(int j = 0;j < m;++ j)
if((x >> j & 1) && !(x >> A[A[i][j]][inv[i]] & 1))
return false;
return true;
} int cnt[M], d[M];
int calc(int x){
memset(cnt, 0, sizeof cnt);
memset(d, 0, sizeof d);
for(int i = 0;i < re;++ i)
if((sta[x] & sta[i]) == sta[x]) ++ cnt[m / siz[i]];
d[0] = 1;
for(int i = 1;i <= n;++ i){
for(int j = 1;j <= m && j <= i;++ j)
d[i] = (d[i] + (LL)cnt[j] * d[i-j]) % mod;
d[i] = (LL)d[i] * iv[i] % mod;
} return d[n];
}
int dfs(int x){
if(~F[x]) return F[x];
int &ans = F[x]; ans = calc(x);
for(int i = 0;i < re;++ i)
if(x != i && reg[i] && ((sta[x] & sta[i]) == sta[x]))
qmo(ans -= dfs(i));
return ans;
}
void solve(){
read(n); read(m); e = -1; S.clear(); memset(F, -1, sizeof F);
bool ff = false;
for(int i = 0;i < m;++ i){
bool flg = true;
for(int j = 0;j < m;++ j){
read(A[i][j]); -- A[i][j];
flg &= A[i][j] == j;
} if(flg && e >= 0) ff = true;
if(flg) e = i;
} if(e == -1 || ff){puts("0"); return;}
for(int i = 0;i < m;++ i){
inv[i] = -1;
for(int j = 0;j < m;++ j)
if(A[i][j] == e){inv[i] = j; break;}
if(inv[i] == -1){puts("0"); return;}
}
for(int i = 0;i < m;++ i)
for(int j = 0;j < m;++ j)
for(int k = 0;k < m;++ k)
if(A[A[i][j]][k] != A[i][A[j][k]]){puts("0"); return;}
e = 1 << e; fr = re = 0; sta[re++] = e;
while(fr < re){
int u = sta[fr++];
for(int i = 0;i < m;++ i) if(!(u >> i & 1)){
int v = u | (1<<i); f = r = 0; q[r++] = i;
while(f < r){
int x = q[f++];
for(int j = 0;j < m;++ j) if(v >> j & 1){
if(!(v >> A[x][j] & 1)){v |= 1 << A[x][j]; q[r++] = A[x][j];}
if(!(v >> A[j][x] & 1)){v |= 1 << A[j][x]; q[r++] = A[j][x];}
}
} if(!S.count(v)){S.insert(v); sta[re++] = v;}
}
} sort(sta, sta + re); for(int i = 0;i < re;++ i){reg[i] = regu(sta[i]); siz[i] = __builtin_popcount(sta[i]);}
int ans = dfs(lower_bound(sta, sta + re, e) - sta);
for(int i = 1;i <= n;++ i) ans = (LL)ans * i % mod; printf("%d\n", ans);
}
int main(){
iv[1] = 1; for(int i = 2;i < M;++ i) iv[i] = mod - (LL)mod / i * iv[mod % i] % mod;
read(T); while(T --) solve();
}
关于 \(n\) 阶群的子群个数有一个上界 \(O(n^{\log n}\log n)\)然而看上去就超松的样子,分析方法大概就是上面的引理 3.2.1,枚举生成子群的集合。
\(|G| \le 30\) 时 \(G\) 的子群个数的最大值是 \(67\),当 \(G=\Z_2^4\) 时取到。
于是你想知道 \(\Z_2^m\) 的子群个数不你不想,结果 oeis 出来好东西(
高斯二项式系数
q-number :
q-factorial :
q-binom :
容易发现 \(q=1\) 时这就是通常的二项式系数。
根据递推公式得到 \(q\in\Z\Rightarrow\binom nm_q\in\Z\)。
性质 1 : 在所有桶为 \(\{c\}_{i=1}^m\) 的正整数序列 \(\{a\}_{i=1}^n\) 中(\(n=\sum_{i=1}^m c_i\)),已知逆序对个数所对应的方案数的生成函数是
证明:想了好久组合意义,结果发现写出递推公式就完事了???
可以用这个来出模板题(我谔谔
性质 2 : 当 \(q\) 为质数时,\(\Z_q^n\) 的大小为 \(q^m\) 的(不变)子群个数,或 \(\mathbb F_q^n\) 的 \(m\) 维子空间个数为 \(\binom nm_q\)。
证明:想了好久组合意义,结果发现写出递推公式就完事了???
有 dalao 知道组合意义么...(我自闭
性质 3 (行的生成函数)
证明:不想组合意义,归纳就完事了!!!
性质 4
证明:上面那条柿子代入 \(z=-1\) 即可。
性质 5 (高斯二项式反演)
证明:
可是这东西有个jb用啊...
计算群论
题目描述:给定 \(n\) 阶置换群 \(S_n\) 的 \(m\) 个元素,求这 \(m\) 个元素生成的子群阶数。
数据范围:\(n,m\le 50\)。
计算群论研究形如 \(\langle S\rangle\) 构成的“群论结构”,Schreier-Sims 算法是其中最基础的算法。
考虑构造子群链 \(\langle S\rangle=G_0\ge G_1\ge\dots\ge G_k=\{e\}\),则 \(|G|=\prod_{i=0}^{k-1}\frac{|G_i|}{|G_{i+1}|}=\prod_{i=0}^{k-1}[G_i:G_{i+1}]\)。
考虑增量构造法,逐渐向 \(S\) 中添加元素,对子群链中的每个子群进行维护。
初始时 \(S=\varnothing,G=\{e\}\),要向 \(S\) 中添加新元素 \(g\),需要判断 \(g\) 是否已经在 \(\langle S\rangle\) 中。
定义 4.1 (截面) 对于群 \(G\) 及其子群 \(H\le G\),设 \(H\) 导出的左陪集集合为 \(C_1,C_2,\dots,C_k\),其中 \(k=[G:H]\),则包含单位元的集合 \(R=\{r_1,r_2,\dots,r_k\}\),其中 \(r_i\in C_i\),称作 \(H\) 的一个左截面。同理可以定义右截面。
考虑 \(H=G_{\chi_1}\) 的一个右截面 \(R=\{e=r_1,r_2,\dots,r_k\}\),满足
- \(\forall i\ne j,Hr_i\ne Hr_j\),也就是 \(r_i\circ r_j^{-1}\notin H\)。
- 考虑陪集 \(Hr_i\),任取其中元素 \(h_0\circ r_i\),有 \((h_0\circ r_i)^{-1}(1)=(r_i^{-1}\circ h_0^{-1})(1)=r^{-1}_i(h_0^{-1}(1))=r^{-1}(1)\)。
- \(\forall g\in G\),根据 \(g^{-1}(1)\) 可以唯一确定其所在的陪集 \(Hr_i\),也就是 \(r_i=Hg\cap R\),称其为 \(g\) 的标准置换 \(\text{norm}\ g\)。
然后考虑元素判定,此时若 \(g\in\langle S\rangle\),则存在 \(r_i\) 使得 \((r_i\circ g)(1)=1\Rightarrow r_i\circ g\in H\Rightarrow r_i\in Hg^{-1}\),也就是求 \(\text{norm}(g^{-1})\)
关于如何求 \(\text{norm}(g)\),则可以先求出 \(g^{-1}(1)\),找到 \(1\) 的原象与其相同的 \(r_i\) 即可。
然后就有 \(g\in G\Leftrightarrow r_i\circ g\in G_{\chi_1}\),递归下去即可。
然后继续考虑增量构造,改变了 \(S\) 之后考虑截面 \(R\) 发生的变化。
\(R\) 中每个元素记录 \(1\) 不同的原象,只需要考虑 \(1\) 多了哪些原象即可。
设原先 \(1\) 的原象集合为 \(A_1\),新增置换 \(g\) 后,考虑置换 \(r_i\circ g\)。也就是 \(\forall p\in A_1\),设 \(r_i(p)=1\),则 \((r_i\circ g)^{-1}(1)=(g^{-1}\circ r_i^{-1})(1)=g_i^{-1}(r_i^{-1}(1))=g_i^{-1}(p)\),也就是 \(g_i^{-1}(p)\) 也是 \(1\) 的原象,枚举 \(A_1\) 中元素搜索即可。
然后继续考虑增量构造,改变了 \(R\) 之后对稳定子群 \(G_{\chi_1}\) 生成集 \(S'\) 的影响。
引理 4.1 (Schreier) 设群 \(H\) 是 \(G=\langle S\rangle\) 的子群,\(R\) 是 \(H\) 的右截面,
则 \(H=\langle S'\rangle\)。
证明:显然 \(\forall g\in G,g\circ(\text{norm}(g))^{-1}\in H\),所以 \(\langle S'\rangle\subseteq H\)。考虑证明 \(H\subseteq\langle S'\rangle\)。
因为 \(e\in R\),所以 \(\forall h\in H\),\(h\) 可以表示为 \(r\circ s_1\circ\cdots\circ s_k\),其中 \(r\in R,s_i\in S\)。
考虑归纳证明上述表示的元素 \(\in\langle S'\rangle\),当 \(k=0\) 时 \(h=r\in H\cap R=\{e\}\),所以 \(h\in\langle S'\rangle\)。
假设 \(k-1\) 时此结论成立,考虑 \(k\) 时,有
根据归纳假设,\(\text{norm}(r\circ s_1)\in R,s_i\in S\Rightarrow \text{norm}(r\circ s_1)\circ s_2\cdots s_k\in\langle S'\rangle\),又因为 \((r\circ s_1)\circ(\text{norm}(r\circ s_1))^{-1}\in\langle S'\rangle\),所以 \(h\in\langle S'\rangle\),成立,Q.E.D.