置换群、等价类计数与 Burnside 引理
群、置换与置换群
本文中 群 部分的内容只用于证明 引理中的一个小结论,所以介绍的有可能不够周全。
群
大家都知道,一个集合 与 上的二元运算 如果满足:
- 结合律:
- 有单位元:存在 满足对任意的 。(这里 指 )
- 逆元存在:对任意的 均存在 使得
那么我们就称 构成一个群。有时也记作 。
此外,若 只满足结合律,我们称其为半群;若 不仅满足结合律还存在单位元,就称其为幺半群。
例如, 是一个群, 关于 意义下的加法构成群,其单位元为 ;而 不是群,因为 不存在逆元。
子群
对于群 ,若 的非空子集 满足 对 这一运算仍然构成群,我们就称 是 的子群,记作 。
例如,考虑 ,运算 为整数加法 ,那么 构成群, 同样构成群,因此 。
陪集
对于群 与其子群 ,考虑一个元素 ,我们称
与
为 的陪集。 称为 的左陪集, 则是 的右陪集。
直观来看,陪集可以看做将集合 在 上进行了「平移」,从而得到了另外一个集合。例如,对于群 与整数加法构成的群,它的一个陪集就是 。
对于有限群 以及其子群 ,我们有以下结论:
- 。这是因为对于 ,,那么必然有 ,否则有 矛盾。
- 若 ,则 。这是因为 关于运算 构成群,故此时 我们有 ,又由 可知 。
- 对任意的 ,要么 ,要么 。证明与上一条类似。
注意上述结论在无限群上不一定成立,例如 ,考虑集合 与整数乘法构成的子群,设 ,则 。
Lagrange 定理
对于群 以及其子群 ,考虑 中 的本质不同的陪集个数,这个数称为 在 中的指数,记作 。
定理指出, 在 中的指数恰为 的大小与 的大小的商,即 。
我们可以感性地理解这一点:子群 的陪集可以看作 在 上的平移,而各个陪集之间两两不交,因此 的所有陪集构成了 的一个分割。(实际上我们还需要说明,对于任意的 ,考虑取 以及 ,那么 这一陪集就是包含 的一个陪集。)而所有陪集大小相等,因此 成立。
置换
设有限集合 ,我们称 的一个置换 为一个双射 ,记作
其中 ,是一个排列。不难发现置换其实就是一个排列。
置换群
由置换构成的群叫做置换群。
其中,这个群的单位元为 这一单位置换,二元运算为 。
由 个 元置换构成的群记作 。置换的乘法不具有交换律。
轮换
若一个置换可以表示为
我们就称 是一个轮换。任意置换都能被分解成若干轮换的乘积。
直观来看,如果我们把一个置换看做一张 点 边的有向图,图中的每个点 都有且仅有一条出边 ,那么考虑该图中的一个连痛块,这个联通块必然是一个大环。换言之,这张图实际上就是若干个环,那么各个环相互独立,一个置换自然就能分解成若干轮换。有时,我们也把这样的一个环叫做置换环。
对于上面的轮换 ,可以简记为 。
我们可以用轮换的乘积来表示一个置换 ,例如,对于 ,写成轮换的形式就是 。
例题1.1
给出一个置换 ,请你求出最小的正整数 ,满足 是单位置换。
单位置换指的是,,,也就是将原序列保持不变。
例如,对于 ,我们有 ,因此 。
解答
我们把 拆成若干轮换,设它们的大小分别为 ,那么答案就是 。证明留给读者。
其中, 指的是 的最小公倍数,即最小的 满足 。多个数的 的定义是类似的。
例题 1.2
给出一个排列 ,每次你可以交换排列中的两个数(不一定相邻),那么至少交换多少次能使对每个 ,都有 ?
解答
我们把 拆成若干置换环,如果拆成了 个置换环,那么答案就是 。
这是因为:
- 对于单位置换,其置换环的个数为 (即 个大小为 的自环)。
- 对于一个排列,交换两个数之后,其置换环的个数最多改变 。
第一条性质是显然成立的。对于第二条,考虑下面这个图
左图中的 ,左图到右图的操作为 。
可以发现,如果我们 的两个点在不同置换环内,那么置换环个数会减一(即左图 -> 右图);否则,置换环个数会加一(即右图 -> 左图)。这样就完成了证明。
等价类计数
引理可以用于对部分「等价类计数」问题进行转化。
等价类计数
这类问题一般会给出一个集合 以及 上的置换群 ,对于 ,若存在置换 使得 ,我们就认为 等价。
等价关系具有传递性,我们把等价关系看成一条无向边,那么这类问题一般需要我们求出来图中的联通块个数,也就是等价类的个数。
染色问题
考虑这样一个问题:
- 你要给一个 的方格染色,每个格子可以染成黑白两种颜色。
- 显然,一共有 种不同的染色方案。
- 现在我们加一个条件:如果两个染色方案可以经过若干次顺时针旋转 变成相同的,那么我们就认为这两种方案是一样的。
- 问此时还有多少种不同的染色方案。
例如,下面四种染色方案都是相同的。
10 01 00 00
00 00 01 10
Burnside 引理
在本题中,所有元素的集合 就是这 种染色方案,置换群为 。其中 指的是 将图形顺时针旋转 。
我们列出这 种状态:
我们约定:
- 表示 中施加在 上之后所得结果仍然为 的置换集合,即 不动点 的集合。
例如,。
- 表示 在施加 中任意置换之后,所能到达的状态集合,又称作 的 轨道。
例如,。
- 表示在置换 下保持不变的状态个数。
例如,。
那么,我们有以下结论:
你可以用上面的例子验证一下这个结论。
我们发现,如果把 与置换乘法构成的群看做 的一个子群,那么 实际上就是 的陪集个数。由 定理可知,该结论确实是成立的。
接下来,我们设 是本质不同的等价类个数,我们发现
前两个等号的原理都是简单的交换求和顺序。第二个等号用到了 这一结论。
移项之后,我们就得到了 引理:
直观来看, 引理指的是,考虑置换群中的每一种置换 ,我们计算出在这个置换下保持不变的状态个数 (通常这一步需要用到组合计数相关的技巧),全部加起来再除以 就是答案。
我们回到「染色问题」上,此时 ,保持不变的状态个数分别为 ,因此答案为 。如下图,可以看到确实如此。
染色问题-Ex
仍然是 的正方形,但是可以染的颜色有 种,怎么做?
我们考虑给方格编个号,如图所示:
我们把 中的元素写成置换:
- 转 :写成轮换的形式就是 。
- 转 :即 ,那么就是 。
- 转 :即 。
- 转 :,因此是 。
考虑一个轮换,不难发现,轮换中涉及到的元素必须都相等。
例如,想要让这个图形转 后保持不变,那么 的颜色必须相同, 的颜色必须相同。
那么对于置换 ,设 为 所能拆成轮换的个数,可以发现,。
因此我们得到
这其实就是 定理。其实只需要记住 引理就够了。
题目选讲
这里选取了一些经典的例题。
Luogu4980【模板】Pólya 定理 Present 7.0
求用 种颜色染一个点数为 的手链有多少种本质不同的方案数。
能够在旋转后重合的两种方案被视作相同的方案。
,答案对 取模。本题中 。
本题中置换有 种,分别是转 格。不难发现这 种置换构成置换群。
考虑转 格的置换,其对应的排列是 。
可以发现这会构成 个置换环,因此不动点的个数为 。那么我们要算的就是
注意到 必然是 的约数,考虑套路地交换求和顺序,有
现在我们要计算 的所有约束的 值,考虑直接找出来 的唯一分解,然后 枚举各质因子的指数即可。
这样做的时间复杂度为 , 来自快速幂。AC Code
Luogu1446 HNOI2008 Cards Present 7.5
题目中给出的 种「洗牌法」其实构成了一个置换群。
考虑 引理,对于一个置换,我们将其拆成若干轮换,要使牌堆构成不动点,每个轮换中的牌的颜色必须都相等。
设拆成了 个轮换,大小分别为 ,我们考虑 DP:设 表示前 个置换环,分别用 张红、蓝、绿牌的方案数,转移枚举最后一个置换环所用颜色即可。
记 ,那么这样做的时间复杂度为 ,已经能够通过本题。
注意到 DP 的过程中 实际上是一个定值,因此可以优化到 。
我偷懒写了 的 AC Code
Luogu2561 AHOI2002 黑白瓷砖 Present 7.0
显然置换群可以用「保持不变」,「顺/逆时针转 」,「关于某条对称轴翻转」一共六种置换来表示。
对于「保持不变」,显然置换环个数为 。
对于「顺/逆时针转 」,画个图手玩一下可以发现,设 表示 层的置换环个数,那么最外面一层会形成 个置换环,然后转化为 层的情况,因此 。
对于「关于某条对称轴翻转」,考虑第 行会有 个环, 行会有 个环,可以得到置换环个数为 。
注意,计算的时候,为了让我们的置换构成置换群,必须要把「关于某条对称轴翻转」这一操作算三遍,即关于三条对称轴翻转(尽管在这三个置换下不动点的个数都是相同的),才能保证这些置换构成一个群。因此置换群的大小实际上是 而非
代码就不放了吧?唯一的难度在于高精度 23333
Luogu4128 SHOI2006 有色图 Future 8.4
什么,哪里有涩图,我有个朋友想要
本题中置换群为全体长为 排列构成的集合 。
考虑一个排列 ,如果将其对应的置换施加在这个图上会使图保持不变,那么对任意的 ,必然有边 与边 同色。
我们令 同属一个置换环,那么可以得到:对于一个置换环,设其中的点依次为 ,那么对于一个固定的 ,任意距离为 的点对之间的连边的颜色都必须相等。
也就是说,若一个置换环的大小为 ,那么这个置换环内部边的颜色共有 种方案。
接下来考虑跨越置换环的边:对于两个大小分别为 的置换环,会形成 条边。
手玩一下可以发现,这些边的方案数实际上是 。
例如, 时,我们可以推出 。一直推下去就可以得到这 条边必须全都一样。你可以试着手玩一下 的情况。
那么现在的问题转化为:
对于排列 ,设其置换环的大小分别为 ,有
那么答案就是 。
显然直接枚举排列算是不行的。
我们可以发现,如果两个排列的置换环大小全都相同,那么它们的贡献也是一样的。
因此考虑枚举 的拆分并计算贡献。具体来说我们枚举 且 的所有序列 ,然后计算有 个置换环,且大小分别为 的排列的个数。
这个怎么算呢,我们考虑一个大小为 的置换环,其内部的方案数为 (就是圆排列),然后外面要把 分配给这些置换环,因此有一个多重组合数 的贡献。然后我们考虑所有大小为 的置换环,可以发现这些置换环之间相互交换顺序其实是没区别的。因此系数就是
其中 表示大小为 的置换环个数。
由于 ,拆分数实际上并不多,我们暴力枚举的时间并不会太大。
AC Code,挺好写的
练习题
- POJ2409 Let it Bead <- 这题的题意挺迷的,我搜了搜题解才发现操作有翻转和旋转两种orz|参考代码
- Luogu4727 图的同构计数 <- 双 倍 经 验
- Luogu3307 SDOI2013 项链 <- 其实没啥思维难度,评黑估计完全是因为麻烦。。|参考题解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效