置换群、等价类计数与 Burnside 引理

群、置换与置换群

本文中 群 部分的内容只用于证明 Burnside 引理中的一个小结论,所以介绍的有可能不够周全。

大家都知道,一个集合 GG 上的二元运算 如果满足:

  • 结合律:a(bc)=(ab)c
  • 有单位元:存在 eG 满足对任意的 ae=ea=a。(这里 abab
  • 逆元存在:对任意的 aG 均存在 a1G 使得 aa1=e

那么我们就称 (G,e,) 构成一个。有时也记作 (G,)

此外,若 (G,) 只满足结合律,我们称其为半群;若 (G,) 不仅满足结合律还存在单位元,就称其为幺半群

例如,(Q,0,+) 是一个群,{0,1,2,,m1} 关于 modm 意义下的加法构成群,其单位元为 0;而 (R,1,×) 不是群,因为 0 不存在逆元。

子群

对于群 (G,),若 G 的非空子集 HG 满足 H 这一运算仍然构成群,我们就称 HG 的子群,记作 HG

例如,考虑 G=Z,H={3x|xZ},运算 为整数加法 ab=a+b,那么 (G,) 构成群,(H,) 同样构成群,因此 HG

陪集

对于群 (G,) 与其子群 HG,考虑一个元素 aG,我们称

aH={ah|hH}

Ha={ha|hH}

H 的陪集。aH 称为 H 的左陪集,Ha 则是 H 的右陪集。

直观来看,陪集可以看做将集合 HG 上进行了「平移」,从而得到了另外一个集合。例如,对于群 H={3x|xZ} 与整数加法构成的群,它的一个陪集就是 2H={3x+2|xZ}

对于有限群 G 以及其子群 HG,我们有以下结论:

  • |aH|=|H|。这是因为对于 b,cHbc,那么必然有 abac,否则有 a1ab=a1acb=c 矛盾。
  • aH,则 aH=H。这是因为 H 关于运算 构成群,故此时 hH 我们有 ahH,又由 |aH|=|H| 可知 aH=H
  • 对任意的 a,bG,要么 aH=bH,要么 aHbH=。证明与上一条类似。

注意上述结论在无限群上不一定成立,例如 G=(Z{0},×,1),考虑集合 H={2x|x0,xZ} 与整数乘法构成的子群,设 a=2H,则 aH={4x|x0,xZ}H

Lagrange 定理

对于群 G 以及其子群 H,考虑 GH 的本质不同的陪集个数,这个数称为 HG 中的指数,记作 [G:H]

Lagrange 定理指出,HG 中的指数恰为 G 的大小与 H 的大小的商,即 [G:H]=|G||H|

我们可以感性地理解这一点:子群 H 的陪集可以看作 HG 上的平移,而各个陪集之间两两不交,因此 H 的所有陪集构成了 G 的一个分割。(实际上我们还需要说明,对于任意的 aG,考虑取 hH 以及 x=h1a,那么 xH 这一陪集就是包含 a 的一个陪集。)而所有陪集大小相等,因此 |H|×[G:H]=|G| 成立。

置换

设有限集合 U={a1,a2,,an},我们称 U 的一个置换 A 为一个双射 f:UU,记作

A=(a1a2a3nap1ap2ap3apn)

其中 pi=f(i),是一个排列。不难发现置换其实就是一个排列。

置换群

由置换构成的群叫做置换群。

其中,这个群的单位元为 f(x)=x 这一单位置换,二元运算为 fg(x)=g(f(x))

n!n 元置换构成的群记作 Sn。置换的乘法不具有交换律。

轮换

若一个置换可以表示为

A=(a1a2an1ana2a3ana1)

我们就称 A 是一个轮换。任意置换都能被分解成若干轮换的乘积。

直观来看,如果我们把一个置换看做一张 nn 边的有向图,图中的每个点 i 都有且仅有一条出边 ipi,那么考虑该图中的一个连痛块,这个联通块必然是一个大环。换言之,这张图实际上就是若干个环,那么各个环相互独立,一个置换自然就能分解成若干轮换。有时,我们也把这样的一个环叫做置换环

对于上面的轮换 A,可以简记为 A=(a1,a2,,an)

我们可以用轮换的乘积来表示一个置换 A,例如,对于 p=(4,3,2,1),写成轮换的形式就是 (23)(14)

例题1.1

给出一个置换 A,请你求出最小的正整数 k,满足 Ak 是单位置换。

单位置换指的是,,I=(a1a2ana1a2an),也就是将原序列保持不变。

例如,对于 A=(12343412),我们有 A×A=(12341234),因此 k=2

解答

我们把 A 拆成若干轮换,设它们的大小分别为 x1,2,,xm,那么答案就是 lcm(x1,x2,,xm)。证明留给读者。

其中,lcm(a,b) 指的是 a,b 的最小公倍数,即最小的 w 满足 aw,bw。多个数的 lcm 的定义是类似的。

例题 1.2

给出一个排列 p,每次你可以交换排列中的两个数(不一定相邻),那么至少交换多少次能使对每个 i=1,2,,n,都有 pi=i

解答

我们把 p 拆成若干置换环,如果拆成了 k 个置换环,那么答案就是 nk

这是因为:

  • 对于单位置换,其置换环的个数为 n(即 n 个大小为 1 的自环)。
  • 对于一个排列,交换两个数之后,其置换环的个数最多改变 1

第一条性质是显然成立的。对于第二条,考虑下面这个图

左图中的 p=(2,3,4,5,6,7,1,9,10,11,12,13,8),左图到右图的操作为 swap(p1,p12)

可以发现,如果我们 swap 的两个点在不同置换环内,那么置换环个数会减一(即左图 -> 右图);否则,置换环个数会加一(即右图 -> 左图)。这样就完成了证明。

等价类计数

Burnside 引理可以用于对部分「等价类计数」问题进行转化。

等价类计数

这类问题一般会给出一个集合 S 以及 S 上的置换群 G,对于 a,bS,若存在置换 fG 使得 f(a)=b,我们就认为 a,b 等价。

等价关系具有传递性,我们把等价关系看成一条无向边,那么这类问题一般需要我们求出来图中的联通块个数,也就是等价类的个数。

染色问题

考虑这样一个问题:

  • 你要给一个 2×2 的方格染色,每个格子可以染成黑白两种颜色。
  • 显然,一共有 24=16 种不同的染色方案。
  • 现在我们加一个条件:如果两个染色方案可以经过若干次顺时针旋转 90 变成相同的,那么我们就认为这两种方案是一样的。
  • 问此时还有多少种不同的染色方案。

例如,下面四种染色方案都是相同的。

10 01 00 00
00 00 01 10

Burnside 引理

在本题中,所有元素的集合 S 就是这 24=16 种染色方案,置换群为 G={0,90,180,270}。其中 x 指的是 将图形顺时针旋转 x

我们列出这 16 种状态:

我们约定:

  • Zx 表示 G 中施加在 x 上之后所得结果仍然为 x 的置换集合,即 不动点 的集合。

例如,Z1=Z2={0,90,180,270},Z3={0},Z11=Z12={0,180}

  • Ex 表示 x 在施加 G 中任意置换之后,所能到达的状态集合,又称作 x 的 轨道。

例如,E1={1},E3={3,4,5,6},E12={11,12}

  • D(g) 表示在置换 g 下保持不变的状态个数。

例如,D(90)={1,2},D(180)={1,2,11,12}

那么,我们有以下结论:

xS,|Ex|×|Zx|=|G|

你可以用上面的例子验证一下这个结论。

我们发现,如果把 Zx 与置换乘法构成的群看做 G 的一个子群,那么 |Ex| 实际上就是 Zx 的陪集个数。由 Lagrange 定理可知,该结论确实是成立的。

接下来,我们设 L 是本质不同的等价类个数,我们发现

gGD(g)=xS|Ex|=i=1L|G|=L×|G|

前两个等号的原理都是简单的交换求和顺序。第二个等号用到了 |G|=|Ex||Zx| 这一结论。

移项之后,我们就得到了 Burnside 引理:

L=1|G|gGD(g)

直观来看,Burnside 引理指的是,考虑置换群中的每一种置换 g,我们计算出在这个置换下保持不变的状态个数 D(g)(通常这一步需要用到组合计数相关的技巧),全部加起来再除以 |G| 就是答案。

我们回到「染色问题」上,此时 G={0,90,180,270},保持不变的状态个数分别为 16,2,4,2,因此答案为 16+2+4+24=6。如下图,可以看到确实如此。

染色问题-Ex

仍然是 2×2 的正方形,但是可以染的颜色有 m 种,怎么做?

我们考虑给方格编个号,如图所示:

我们把 G 中的元素写成置换:

  • 0:写成轮换的形式就是 (1)(2)(3)(4)
  • 90:即 14,43,32,21,那么就是 (4321)
  • 180:即 (13)(24)
  • 27012,23,34,41,因此是 (1234)

考虑一个轮换,不难发现,轮换中涉及到的元素必须都相等。

例如,想要让这个图形转 180 后保持不变,那么 1,3 的颜色必须相同,2,4 的颜色必须相同。

那么对于置换 g,设 c(g)g 所能拆成轮换的个数,可以发现,D(g)=mc(g)

因此我们得到

L=1|G|gGmc(g)

这其实就是 Polya 定理。其实只需要记住 Burnside 引理就够了。

题目选讲

这里选取了一些经典的例题。

Luogu4980【模板】Pólya 定理 Present 7.0

求用 m 种颜色染一个点数为 n 的手链有多少种本质不同的方案数。

能够在旋转后重合的两种方案被视作相同的方案。

1n,m109,答案对 109+7 取模。本题中 n=m

本题中置换有 n 种,分别是转 0,1,,n1 格。不难发现这 n 种置换构成置换群。

考虑转 x 格的置换,其对应的排列是 pi=(i+x)modn

可以发现这会构成 gcd(n,x) 个置换环,因此不动点的个数为 mgcd(n,x)。那么我们要算的就是

x=0n1mgcd(n,x)

注意到 gcd(n,x) 必然是 n 的约数,考虑套路地交换求和顺序,有

x=0n1mgcd(n,x)=d|nφ(n/d)md

现在我们要计算 n 的所有约束的 φ 值,考虑直接找出来 n 的唯一分解,然后 DFS 枚举各质因子的指数即可。

这样做的时间复杂度为 O(nlogn)log 来自快速幂。AC Code

Luogu1446 HNOI2008 Cards Present 7.5

题目中给出的 m 种「洗牌法」其实构成了一个置换群。

考虑 Burnside 引理,对于一个置换,我们将其拆成若干轮换,要使牌堆构成不动点,每个轮换中的牌的颜色必须都相等。

设拆成了 k 个轮换,大小分别为 x1,x2,,xk,我们考虑 DP:设 f(i,a,b,c) 表示前 i 个置换环,分别用 a,b,c 张红、蓝、绿牌的方案数,转移枚举最后一个置换环所用颜色即可。

k=max{Sr,Sg,Sb}20,那么这样做的时间复杂度为 O(m2k3),已经能够通过本题。

注意到 DP 的过程中 a+b+c 实际上是一个定值,因此可以优化到 O(m2k2)

我偷懒写了 O(m2k3)AC Code

Luogu2561 AHOI2002 黑白瓷砖 Present 7.0

显然置换群可以用「保持不变」,「顺/逆时针转 120」,「关于某条对称轴翻转」一共六种置换来表示。

对于「保持不变」,显然置换环个数为 n(n+1)2

对于「顺/逆时针转 120」,画个图手玩一下可以发现,设 f(n) 表示 n 层的置换环个数,那么最外面一层会形成 n1 个置换环,然后转化为 n3 层的情况,因此 f(n)=f(n3)+n1

对于「关于某条对称轴翻转」,考虑第 2k 行会有 k 个环,2k+1 行会有 k+1 个环,可以得到置换环个数为 12(n(n+1)2+n2)

注意,计算的时候,为了让我们的置换构成置换群,必须要把「关于某条对称轴翻转」这一操作算三遍,即关于三条对称轴翻转(尽管在这三个置换下不动点的个数都是相同的),才能保证这些置换构成一个群。因此置换群的大小实际上是 6 而非 4

代码就不放了吧?唯一的难度在于高精度 23333

Luogu4128 SHOI2006 有色图 Future 8.4

什么,哪里有涩图,我有个朋友想要

本题中置换群为全体长为 n 排列构成的集合 Sn

考虑一个排列 p,如果将其对应的置换施加在这个图上会使图保持不变,那么对任意的 ij,必然有边 (i,j) 与边 (pi,pj) 同色。

我们令 i,j 同属一个置换环,那么可以得到:对于一个置换环,设其中的点依次为 x1x2xk(x1),那么对于一个固定的 d,任意距离为 d 的点对之间的连边的颜色都必须相等。

也就是说,若一个置换环的大小为 k,那么这个置换环内部边的颜色共有 mk/2 种方案。

接下来考虑跨越置换环的边:对于两个大小分别为 a,b 的置换环,会形成 a×b 条边。

手玩一下可以发现,这些边的方案数实际上是 mgcd(a,b)

例如,a=3,b=5 时,我们可以推出 (1,1)=(2,2)=(3,3)=(1,4)=(2,5)=(3,1)=(1,2)。一直推下去就可以得到这 3×5=15 条边必须全都一样。你可以试着手玩一下 a=2,b=4 的情况。

那么现在的问题转化为:

对于排列 p,设其置换环的大小分别为 x1,x2,,xk,有

w(p)=i=1kmxi/2×ijmgcd(xi,xj)

那么答案就是 1n!pw(p)

显然直接枚举排列算是不行的。

我们可以发现,如果两个排列的置换环大小全都相同,那么它们的贡献也是一样的。

因此考虑枚举 n 的拆分并计算贡献。具体来说我们枚举 x1x2x3xkxi=n 的所有序列 x,然后计算有 k 个置换环,且大小分别为 x1,x2,,xk 的排列的个数。

这个怎么算呢,我们考虑一个大小为 a 的置换环,其内部的方案数为 (a1)!(就是圆排列),然后外面要把 n 分配给这些置换环,因此有一个多重组合数 (nx1,x2,,xk)=n!xi! 的贡献。然后我们考虑所有大小为 r 的置换环,可以发现这些置换环之间相互交换顺序其实是没区别的。因此系数就是

n!xircr!

其中 cr 表示大小为 r 的置换环个数。

由于 n53,拆分数实际上并不多,我们暴力枚举的时间并不会太大。

AC Code,挺好写的

练习题

posted @   云浅知处  阅读(438)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示