群论学习笔记
写在前面
之前写过一个辣鸡,以为会板子就好了,结果在ABC284H中寄了。所以决定重写个完整的。
概念性的东西
群论研究的是对称性,为了方便描述,我们举个例子。
比如对于一个正方形而言,可以发现我们把它顺时针旋转 \(90^{\circ}\) 后,可以发现它和原来相同,同理,旋转 \(180^{\circ},270^{\circ},0^{\circ}\) 也相等(不考虑超过 \(360^{\circ}\) 的旋转)。
因此为了叙述正方形旋转的对称性,我们定义一个群,及 \(S=\{旋转 0^{\circ},旋转 90^{\circ},旋转 180^{\circ},旋转 270^{\circ}\}\)。
但是这还不够,注意到这些操作是可以叠加的,比如旋转 \(90^{\circ}\) 后再旋转 \(180^{\circ}\),那么相当于旋转 \(270^{\circ}\),那么这个叠加运算需要定义一下,姑且称其为 \(+\) 吧。
那么 \((S,+)\),就构成了正方形旋转的一个群。
举完了个简单的例子,再来说明形式化的定义:
若一个非空集合 \(S\) 上的运算 \(\times\) 满足以下条件,那么称 \((S,\times)\) 是一个群。
- 封闭性:\(\forall a,b\in S,a\times b\in S\)。比如上面的例子中,无论这个群中的变换怎样叠加,一定还在这个集合中。
- 结合律: \(\forall a,b,c\in S,(a\times b)\times c=a\times (b\times c)\),运算顺序无影响。
- 存在单位元:\(\exists e\in S,\forall a\in S,a\times e=e\times a=a\),上面的例子中,\(旋转 0^{\circ}\) 就是单位元。
- 存在逆元:\(\forall a\in S,\exists b\in S,a\times b=b\times a=e\),\(b\) 是 \(a\) 的逆元,也可以表示为 \(a^{-1}\)。
可以通过上面的例子,发现群内的元素一般来说都是某种操作,而不是简单的元素。
其他定义:
- 阿贝尔群:满足交换律的群,也就是 \(\forall a,b\in S,a\times b=b\times a\)。
- 半群:\((S,\times )\) 只满足封闭性和结合律。
- 幺半群:半群的基础上还存在单位元。
- 有限群:元素个数有限的群。注意群的个数可以无限,比如圆的旋转,转任意度都和原来一样。
举一些例子:
- \((R,+)\) 和 \((R,\times )\) 都是无限群。
- \((R,\max)\) 是半群,不存在单位元和逆元。但是 \((N,\max)\) 是幺半群,单位元是 \(0\)。
一些简单性质
- 群的单位元唯一
反证法,假设有两个单位元 \(a,b,a\ne b\),那么 \(a=a\times b=b\)。
- 一个群中 \(x\) 的逆元唯一
假设有两个逆元 \(a,b\),那么 \(a=a\times (x\times b)=b\)。
子群与陪集
子群:对于一个群 \((S,\times )\),如果存在一个 \(T \subseteq S\) 且 \((T,\times )\) 是一个群,\((T,\times )\) 就是 \((S,\times )\) 的子群,可以记为 \(T\le S\)。
陪集:
- 如果 \(H\le S\),对于一个 \(a\in G\),定义 \(H\) 的一个左陪集为 \(aH=\{a\times h,h\in H\}\)。
- 如果 \(H\le S\),对于一个 \(a\in G\),定义 \(H\) 的一个右陪集为 \(Ha=\{h\times a,h\in H\}\)。
陪集可能不是一个群,因为可能没有单位元。
陪集的一些性质:
- \(\forall a\in S,|H|=|Ha|\)。
只需要证明陪集中元素两两不同,反证一下即可。
- \(\forall a\in S,a\in Ha\)。
因为 \(H\) 中一定有单位元。
-
\(Ha=H\Leftrightarrow a\in H\)。
-
\(Ha=Hb\Leftrightarrow ab^{-1}\in H\)。
\(Ha=Hb\) 可以推出 \(Hab^{-1}=H\)。
- \(Ha\cap Hb\ne \empty,Ha=Hb\)。
也就是两个陪集要么相等,要么完全不交。
证明可以简单反证。
拉格朗日定理
如果 \(H\le S\),那么 \(|H|\) 整除 \(|S|\),也就是:
此处 \([S:H]\) 表示 \(H\) 不同的陪集数量。
证明:不同的陪集两两不交,且大小相等。
周期相关
对于一个元素 \(a\in S\),定义周期 \(o(a)=\min \{x|a^x=e,x\in N^{+}\}\),这里 \(a^{x}=a^{x-1}\times a\)。
- \(o(a) | |G|\)。
因为是个子群,拉格朗日定理即可。
-
\(a^{|G|}=e\)。
-
\(|G|\) 为素数,则 \(o(a)=|G|\)。
置换群
有限集合自身的双射称为置换。
简单的表示为 \((p_1,p_2,p_3,...,p_n)\),\(p\) 是一个排列,这个置换作用在 \(a\) 上表示 \(f(a_i)=a_{p_i}\)。
置换的总个数为 \(n!\)。
那么定义一下两个置换的运算,假设有 \(f=(p_1,p_2,...,p_n),g=(q_1,q_2,...,q_n)\)。
那么 \(f\times g=(p_{q_1},p_{q_2},...,p_{q_n})\),也就是先做 \(g\) 再做 \(f\)。
显然,这样所有长度为 \(n\) 的置换构成了一个群,称为 \(n\) 元对称群 \(S_n\),这个群的任意一个子群被称为置换群。
置换群的单位元是 \(I=(1,2,3,...,n)\)。
轨道-稳定子定理
\(A,B\) 是两个有限集合,令 \(X=B^A\) 表示 \(A\) 到 \(B\) 的全部映射,\(G\) 是作用在 \(A\) 上的一个群。
比如给一个正方形的四条边染色,那么 \(A\) 就是四条边,\(B\) 就是颜色集合,\(G\) 就表示令四条边等价的置换群,\(X\) 就表示所有染色方案(不去重)。
对于一个 \(x\in X\),也就是一种染色方案,定义 \(g(x)\) 表示对 \(x\) 进行 \(g\) 置换后的结果。
-
稳定子:\(G^x=\{g|g(x)=x,g\in G\}\),即置换后和原来相等。
-
轨道:\(G(x)=\{g(x)|g\in G\}\),注意此处 \(|G(x)|\ne G\),因为可能有 \(g(x)\) 相同。
-
轨道-稳定子定理:
证明,先考虑 \(G^x\) 是 \(G\) 的子群。
- 封闭性:\(g(x)=x,f(x)=x,g(f(x))=g(x)=x\)。
- 结合律:显然满足。
- 单位元:\(I(x)=x\)。
- 逆元:\(f(x)=x,x=f^{-1}(x),f^{-1}\in G^x\)。
用拉格朗日定理,接下来只需要证明 \([G:G^x]=|G(x)|\)。
这个考虑对轨道里每一个元素求一个陪集 \(aG^x\)。容易证明他们两两不交即可。
Burnside 引理
令 \(X/G\) 表示在 \(X\)(所有染色方案中),在 \(G\) 作用下的所有等价类的集合(如果两种方案通过 \(G\) 中置换的作用下相等,则它们在一个等价类中),也就是对于所有 \(x\in X\),轨道的数量。
这里,\(X^g=\{x|g(x)=x,x\in X\}\),也就是 \(g\) 作用下 不动点集合。
证明:
这里用一下轨道-稳定子定理。
此时考虑每个置换的贡献,就可以得到:
Pólya 定理
考虑在染色问题中,如果每个点都可以任意染色,也就是 \(|X|=|B|^{|A|}\),那么 \(g(x)=x\) 可以发现对于 \(g\) 的每一个置换环都需要然一种颜色,因此令 \(c(g)\) 表示 \(g\) 的置换环数量,\(m=|B|\),可以得到:
做题记录
给定一个 \(n\) 个点,\(n\) 条边的环,有 \(n\) 种颜色,给每个顶点染色,问有多少种本质不同的染色方案,答案对 \(10^9+7\) 取模。
注意本题的本质不同,定义为:只需要不能通过旋转与别的染色方案相同。
\(n\le 10^9,t\le 10^3\)。
直接用 Pólya 即可,\(G\) 中每个元素都是形如 \((i+1,i+2,...,n,1,2,...,i)\) 这样的排列,\(|G|=n\),它的置换环数量显然就是 \(、gcd(n,i)\)。
大力求即可,复杂度 \(tn^{\frac{3}{4}}\)。
已知 \(n\) 个点的无向完全图,给每条边染色,一共 \(m\) 种颜色,两种染色方案相同仅当将点编号置换后对应边颜色相同,求方案数。
\(n\le 60\)。
无向图的计数问题是群论的一个重要应用。
由于是给所有边进行染色,但是置换是对于点的,所以需要把置换改成对于边的操作。
即对于置换 \((p_1,p_2,...,p_n)\),相当于 \(p_{(i,j)}=(p_i,p_j)\) 这个置换,相当于求这个的置换环数量。
考虑对于一种方案,求其置换环数量。
先考虑原排列 \(p\) 的置换环,假设大小分别为 \(a_1,a_2,...,a_k\)。
对于所有边,相当于两个端点在置换环上分别走,那么分类讨论一下。
-
如果两端点在同一个置换环内,那么考虑两端点在环上的距离 \(x\),每个距离对应着一个置换环,而且 \(x\) 与 \(a_i-x\) 等价,所以数量为 \(\left\lfloor\frac{a_i}{2}\right\rfloor\)
-
如果两端点不在一个置换环内,从一条边出发走 \(\text{lcm}(a_i,a_j)\) 次后会走回来,所以置换环数量为 \(\frac{a_ia_j}{\text{lcm}}=\gcd(a_i,a_j)\)。
加起来就好了,假设是 \(f(p)\)。
那么答案就是
暴力求复杂度 \(O(n!)\),寄。
但是注意到对于每个排列,如果其置换环大小集合 \(a\) 相同,则它们等价,因此可以直接分拆数去求,可以通过 \(n=60\),此时总分拆方案数是 \(966467\)。
双倍经验:P4727
相当于 \(m=2,p=997\)。
三倍经验:ABC284Ex。
在图计数的基础上加了个点染色。
那么只需要在式子后面乘一个点染色方案数,因为点和边独立。
\(g(p)\) 表示 \(p\) 的置换环数量。
但是求的是恰好用 \(k\) 种颜色,只需要容斥一下,暴力跑 \(k\) 遍 dfs 即可。
但是太慢了,由于发现上面的 \(g(p)\le n\),可以一次 dfs 求出 \(m^i\) 前面乘的系数,这样就只需要一次 dfs,可以跑 \(n\le 60\) 了。
先直接上公式,相当于求 \(|X^g|\)。
注意到这个环上的排列很有特征,对于 \(P_i=(i+1,i+2,...,n,1,2,...,i)\) 而言,\(|X^g|\) 中的染色方案满足存在长度为 \(\frac{n}{\gcd(n,i)}\) 的周期。
每个周期的黑色点数量相同,问题转化为子问题,也就是去掉了环等价的限制。
连续 \(k\) 个黑比较难搞,转化一下就是两个白之间距离不能超过 \(k\),这个可以插板了。
先枚举最左和最右用了多少,然后中间的大力容斥即可。
注意到第二个循环只需要枚举到 \(\frac{m}{k+1}\) 即可,因此总复杂度 \(\frac{m}{k}\times k=m\),可过。
实现里没有用莫比乌斯反演,因为暴力就行了。
一开始以为这个过不去,怒推生成函数。
问题相当于只需要求解
只需要枚举左边选了几个,那么右边的就可以直接算了,所以这部分可以 \(O(\min(b,\frac{a}{k+1}))\),所以综上,这部分复杂度就变成了 \(O(\frac{m}{k})\)。
确实快了一些。