群论学习笔记

写在前面

之前写过一个辣鸡,以为会板子就好了,结果在ABC284H中寄了。所以决定重写个完整的。

参考文章

概念性的东西

群论研究的是对称性,为了方便描述,我们举个例子。

比如对于一个正方形而言,可以发现我们把它顺时针旋转 90 后,可以发现它和原来相同,同理,旋转 180,270,0 也相等(不考虑超过 360 的旋转)。

因此为了叙述正方形旋转的对称性,我们定义一个,及 S={0,90,180,270}

但是这还不够,注意到这些操作是可以叠加的,比如旋转 90 后再旋转 180,那么相当于旋转 270,那么这个叠加运算需要定义一下,姑且称其为 + 吧。

那么 (S,+),就构成了正方形旋转的一个群。

举完了个简单的例子,再来说明形式化的定义:

若一个非空集合 S 上的运算 × 满足以下条件,那么称 (S,×) 是一个群。

  • 封闭性:a,bS,a×bS。比如上面的例子中,无论这个群中的变换怎样叠加,一定还在这个集合中。
  • 结合律: a,b,cS,(a×b)×c=a×(b×c),运算顺序无影响。
  • 存在单位元:eS,aS,a×e=e×a=a,上面的例子中,0 就是单位元。
  • 存在逆元:aS,bS,a×b=b×a=eba 的逆元,也可以表示为 a1

可以通过上面的例子,发现群内的元素一般来说都是某种操作,而不是简单的元素。

其他定义:

  • 阿贝尔群:满足交换律的群,也就是 a,bS,a×b=b×a
  • 半群:(S,×) 只满足封闭性和结合律。
  • 幺半群:半群的基础上还存在单位元。
  • 有限群:元素个数有限的群。注意群的个数可以无限,比如圆的旋转,转任意度都和原来一样。

举一些例子:

  • (R,+)(R,×) 都是无限群。
  • (R,max) 是半群,不存在单位元和逆元。但是 (N,max) 是幺半群,单位元是 0

一些简单性质

  • 群的单位元唯一

反证法,假设有两个单位元 a,b,ab,那么 a=a×b=b

  • 一个群中 x 的逆元唯一

假设有两个逆元 a,b,那么 a=a×(x×b)=b

子群与陪集

子群:对于一个群 (S,×),如果存在一个 TS(T,×) 是一个群,(T,×) 就是 (S,×) 的子群,可以记为 TS

陪集:

  • 如果 HS,对于一个 aG,定义 H 的一个左陪集为 aH={a×h,hH}
  • 如果 HS,对于一个 aG,定义 H 的一个右陪集为 Ha={h×a,hH}

陪集可能不是一个群,因为可能没有单位元。

陪集的一些性质:

  • aS,|H|=|Ha|

只需要证明陪集中元素两两不同,反证一下即可。

  • aS,aHa

因为 H 中一定有单位元。

  • Ha=HaH

  • Ha=Hbab1H

Ha=Hb 可以推出 Hab1=H

  • HaHb,Ha=Hb

也就是两个陪集要么相等,要么完全不交。

证明可以简单反证。

拉格朗日定理

如果 HS,那么 |H| 整除 |S|,也就是:

|S|=|H|×[S:H]

此处 [S:H] 表示 H 不同的陪集数量。

证明:不同的陪集两两不交,且大小相等。

周期相关

对于一个元素 aS,定义周期 o(a)=min{x|ax=e,xN+},这里 ax=ax1×a

  • o(a)||G|

因为是个子群,拉格朗日定理即可。

  • a|G|=e

  • |G| 为素数,则 o(a)=|G|

置换群

有限集合自身的双射称为置换。

简单的表示为 (p1,p2,p3,...,pn)p 是一个排列,这个置换作用在 a 上表示 f(ai)=api

置换的总个数为 n!

那么定义一下两个置换的运算,假设有 f=(p1,p2,...,pn),g=(q1,q2,...,qn)

那么 f×g=(pq1,pq2,...,pqn),也就是先做 g 再做 f

显然,这样所有长度为 n 的置换构成了一个群,称为 n 元对称群 Sn,这个群的任意一个子群被称为置换群。

置换群的单位元是 I=(1,2,3,...,n)

轨道-稳定子定理

A,B 是两个有限集合,令 X=BA 表示 AB 的全部映射,G 是作用在 A 上的一个群。

比如给一个正方形的四条边染色,那么 A 就是四条边,B 就是颜色集合,G 就表示令四条边等价的置换群,X 就表示所有染色方案(不去重)。

对于一个 xX,也就是一种染色方案,定义 g(x) 表示对 x 进行 g 置换后的结果。

  • 稳定子:Gx={g|g(x)=x,gG},即置换后和原来相等。

  • 轨道:G(x)={g(x)|gG},注意此处 |G(x)|G,因为可能有 g(x) 相同。

  • 轨道-稳定子定理:

|G|=|Gx|×|G(x)|

证明,先考虑 GxG 的子群。

  • 封闭性:g(x)=x,f(x)=x,g(f(x))=g(x)=x
  • 结合律:显然满足。
  • 单位元:I(x)=x
  • 逆元:f(x)=x,x=f1(x),f1Gx

用拉格朗日定理,接下来只需要证明 [G:Gx]=|G(x)|

这个考虑对轨道里每一个元素求一个陪集 aGx。容易证明他们两两不交即可。

Burnside 引理

X/G 表示在 X(所有染色方案中),在 G 作用下的所有等价类的集合(如果两种方案通过 G 中置换的作用下相等,则它们在一个等价类中),也就是对于所有 xX,轨道的数量。

|X/G|=1|G|gG|Xg|

这里,Xg={x|g(x)=x,xX},也就是 g 作用下 不动点集合。

证明:

|X/G|=yX/G1=yX/Gxy1|y|=yX/Gxy1|G(x)|

这里用一下轨道-稳定子定理。

=1|G|yX/Gxy|Gx|=1|G|xX|Gx|

此时考虑每个置换的贡献,就可以得到:

=1|G|gG|Xg|

Pólya 定理

考虑在染色问题中,如果每个点都可以任意染色,也就是 |X|=|B||A|,那么 g(x)=x 可以发现对于 g 的每一个置换环都需要然一种颜色,因此令 c(g) 表示 g 的置换环数量,m=|B|,可以得到:

|X/G|=1|G|gGmc(g)

做题记录

P4980

给定一个 n 个点,n 条边的环,有 n 种颜色,给每个顶点染色,问有多少种本质不同的染色方案,答案对 109+7 取模。

注意本题的本质不同,定义为:只需要不能通过旋转与别的染色方案相同

n109,t103

直接用 Pólya 即可,G 中每个元素都是形如 (i+1,i+2,...,n,1,2,...,i) 这样的排列,|G|=n,它的置换环数量显然就是 gcd(n,i)

|X/G|=1|G|gGmc(g)=1ni=1nngcd(n,i)=1nd|nndi=1n[gcd(i,n)=d]=1nd|nndφ(nd)

大力求即可,复杂度 tn34

code


P4128

已知 n 个点的无向完全图,给每条边染色,一共 m 种颜色,两种染色方案相同仅当将点编号置换后对应边颜色相同,求方案数。

n60

无向图的计数问题是群论的一个重要应用。

由于是给所有边进行染色,但是置换是对于点的,所以需要把置换改成对于边的操作。

即对于置换 (p1,p2,...,pn),相当于 p(i,j)=(pi,pj) 这个置换,相当于求这个的置换环数量。

考虑对于一种方案,求其置换环数量。

先考虑原排列 p 的置换环,假设大小分别为 a1,a2,...,ak

对于所有边,相当于两个端点在置换环上分别走,那么分类讨论一下。

  • 如果两端点在同一个置换环内,那么考虑两端点在环上的距离 x,每个距离对应着一个置换环,而且 xaix 等价,所以数量为 ai2

  • 如果两端点不在一个置换环内,从一条边出发走 lcm(ai,aj) 次后会走回来,所以置换环数量为 aiajlcm=gcd(ai,aj)

加起来就好了,假设是 f(p)

那么答案就是

|X/G|=1|G|gGXg=1n!pSnmf(p)

暴力求复杂度 O(n!),寄。

但是注意到对于每个排列,如果其置换环大小集合 a 相同,则它们等价,因此可以直接分拆数去求,可以通过 n=60,此时总分拆方案数是 966467

code

双倍经验:P4727

相当于 m=2,p=997

三倍经验:ABC284Ex

在图计数的基础上加了个点染色。

那么只需要在式子后面乘一个点染色方案数,因为点和边独立。

|X/G|=1|G|gGXg=1n!pSnmg(p)2f(p)

g(p) 表示 p 的置换环数量。

但是求的是恰好用 k 种颜色,只需要容斥一下,暴力跑 k 遍 dfs 即可。

但是太慢了,由于发现上面的 g(p)n,可以一次 dfs 求出 mi 前面乘的系数,这样就只需要一次 dfs,可以跑 n60 了。


loj6519

先直接上公式,相当于求 |Xg|

注意到这个环上的排列很有特征,对于 Pi=(i+1,i+2,...,n,1,2,...,i) 而言,|Xg| 中的染色方案满足存在长度为 ngcd(n,i) 的周期。

每个周期的黑色点数量相同,问题转化为子问题,也就是去掉了环等价的限制。

连续 k 个黑比较难搞,转化一下就是两个白之间距离不能超过 k,这个可以插板了。

先枚举最左和最右用了多少,然后中间的大力容斥即可。

d=0k(d+1)i=0nm(1)i(nmi)(md+nm2i(k+1)nm2)

注意到第二个循环只需要枚举到 mk+1 即可,因此总复杂度 mk×k=m,可过。

code

实现里没有用莫比乌斯反演,因为暴力就行了。

一开始以为这个过不去,怒推生成函数。

[xm](1+x+x2+...+xk)nm1(1+2x+3x2+...+(k+1)xk)=[xm](1xk+11x)nm11xk+11x(k+1)xk+11x=[xm](1xk+1)nm(1x)nm+1(k+1)[xmk1](1xk+1)nm1(1x)nm

问题相当于只需要求解

[xa](1xk+1)b(1x)c=[xa](1xk+1)b(c1+ii)xi

只需要枚举左边选了几个,那么右边的就可以直接算了,所以这部分可以 O(min(b,ak+1)),所以综上,这部分复杂度就变成了 O(mk)

code

确实快了一些。

posted @   houzhiyuan  阅读(283)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示
主题色彩