Burnside 引理与 Polya 定理

1 群论基础

1.1 群的定义

若集合 \(S\ne \varnothing\)\(S\) 上的二元运算 \(\cdot\) 构成的代数结构 \(G(S,\cdot)\) 满足以下性质:

  • 封闭性:\(\forall a,b\in S,a\cdot b\in S\)
  • 结合律:\(\forall a,b,c\in S,(a\cdot b)\cdot c=a\cdot(b\cdot c)\in S\)
  • 单位元:\(\exists e\in S,\forall a\in S,e\cdot a=a\cdot e=a\)
  • 逆元:\(\forall a\in S,\exists b\in S,a\cdot b=b\cdot a=e\)。称 \(b\)\(a\) 的逆元,记作 \(a^{-1}\)

则称 \(G(S,\cdot)\) 是一个

例:实数的乘法运算就是一个群。

还有一些关于群的其他定义:

  • 阿贝尔群:即交换群,满足交换律的群。
  • 半群:集合 \(S\ne \varnothing\)\(S\) 上的运算 \(\cdot\) 构成的代数结构 \((S,\cdot)\),满足封闭性和结合律。
  • 有限群:元素个数有限的群称为有限群,其元素个数称作有限群的,记作 \(|G|\)

1.2 子群及相关性质

1.2.1 子群相关概念

子群:对于一个群 \(G(S,\cdot)\),若 \(T\subseteq S\),且 \(H(T,\cdot)\) 也是一个群,我们称 \(H\)\(G\) 的子群,记作 \(H\le G\)

生成子群:对于 \(S\) 的一个非空子集 \(T\),我们求出 \(G\) 的所有使 \(T\subseteq T'\) 的子群 \((T',\cdot)\) 的交 \(G'\),则 \(G'\) 称为 \(T\) 的生成子群,记作 \(\left<T\right>\)

循环群:仅由一个元素生成的群称作循环群。

陪集:对于群 \(G\) 的一个子群 \(H\)

  • 对于 \(a\in G\),定义 \(H\) 的一个左陪集\(_aH=\{a\cdot h\mid h\in H\}\)
  • 对于 \(a\in G\),定义 \(H\) 的一个右陪集\(H_a=\{h\cdot a\mid h\in H\}\)

1.2.2 陪集的性质

这里我们只讨论右陪集的性质,左陪集是同理的:

  • \(\forall a\in G,|H|=|H_a|\)
  • \(\forall a\in G,a\in H_a\)
  • \(H_a=H\Leftrightarrow a\in H\)。证明考虑用上两条性质即可。
  • \(H_a=H_b\Leftrightarrow ab^{-1}\in H\)。证明考虑用上一条性质即可。
  • \(H_a\cap H_b\ne \varnothing \Rightarrow H_a=H_b\)。证明考虑用上一条性质即可。

然后由这些性质可以导出下面的定理:

  • \(H\le G\),那么 \(|H|\) 整除 \(|G|\),更准确的:

\[|G|=|H|\times [G:H] \]

其中 \([G:H]\) 表示 \(G\)\(H\) 不同的陪集(左右均可)数量。这就是拉格朗日定理

2 置换和置换群

2.1 置换

有限集合到自身的双射称为称为置换,不可重集 \(S=\{a_1,a_2\cdots,a_n\}\) 上的置换可表示为:

\[f=\begin{pmatrix}a_1&a_2&\cdots&a_n\\a_{p_1}&a_{p_2}&\cdots&a_{p_n}\end{pmatrix} \]

其中 \(p_1\sim p_n\)\([1,n]\) 的一个排列。显然 \(S\) 上的置换数量为 \(n!\)

定义两个置换 \(f,g\) 的乘法 \(f\circ g =f(g(x))\),也就是先经过 \(g\) 的置换再经过 \(f\) 的置换。

2.2 置换群

显然的,对于集合 \(S\) 上的所有置换关于置换乘法具有封闭性、结合律、有单位元(恒等置换)、有逆元(上下两行互相颠倒的两个置换)。所以它们构成了一个群。

我们通常将在 \(\{1,2,\cdots,n\}\) 上的所有置换构成的群称之为 \(n\) 元对称群,记作 \(S_n\)。这个群的任意一个子群称为置换群

2.3 循环置换

循环置换又称轮换,是一种特殊的置换,可以写作:

\[(a_1,a_2,\cdots,a_n)=\begin{pmatrix}a_1&a_2&\cdots&a_{n-1}&a_n\\a_2&a_3&\cdots&a_n&a_1\end{pmatrix} \]

若两个置换中没有相同元素,则称两个置换不相交。有如下定理:

  • 每一个置换都可以分解成若干互不相交的轮换的乘积。例如 \(\begin{pmatrix}1&2&3&4&5&6\\2&6&5&4&3&1\end{pmatrix}=(1,2,6)\circ(3,5)\)

证明考虑将 \(a_i\)\(a_{p_i}\) 连边,则每个点入度出度均为一,因此形成的图必然是若干环的集合,而每一个环就是一个轮换。

3 轨道-稳定子定理

定义 \(A,B\) 是两个有限集合,\(X=B^A\) 表示所有 \(A\)\(B\) 的映射,\(G\) 是作用在 \(A\) 上的一个置换群。

我们定义,对于每个 \(x\in X\)

\[G^x=\{g\mid g(x)=x,g\in G \}\\ G(x)=\{g(x)\mid g\in G\} \]

\(G^x\)\(x\)稳定子\(G(x)\) 称作 \(x\)轨道

考虑两者的实际含义,稳定子的意义实际上是 \(G\) 中的某一个置换,满足置换前和置换后做映射 \(x\) 得到的结果不变。而轨道就是 \(G\) 中的所有置换后做映射 \(x\) 得到的结果。

例:给定一个 \(2\times 2\) 的矩形,对它进行黑白染色,求本质不同方案数(本质不同定义为无法通过旋转得到另一种方案)。

我们的群 \(G\),也就是置换中的元素应该有顺时针旋转 \(0^\circ,90^\circ,180^\circ,270^\circ\)

对于 \(X\) 中的一个元素 \(x\),即一种染色方案,例如 \(\begin{pmatrix}1&0\\0&1\end{pmatrix}\),其稳定子集合就是顺时针旋转 \(0^\circ,180^\circ\),其轨道集合就是 \(\begin{pmatrix}1&0\\0&1\end{pmatrix},\begin{pmatrix}0&1\\1&0\end{pmatrix}\)

然后我们就可以得到轨道-稳定子定理

\[|G|=|G^x|\times |G(x)| \]

证明的话先考虑证明 \(G^x\)\(G\) 的子群,由定义不难证出它满足群的四个定义。紧接着由拉格朗日定理可以得到 \(|G|=|G^x|\times [G:G^x]\)。然后证明 \([G:G^x]=|G(x)|\) 即可。

4 Burnside 引理

仍然沿用上一节中 \(A,B,X,G\) 的定义。我们定义若 \(X\) 的两个映射经过 \(G\) 中的置换后相等,则称两个映射在同一等价类中。

定义 \(X/G\) 表示 \(G\) 作用在 \(X\) 上产生的所有等价类的集合。而 \(|X/G|\) 称为轨道数(不难发现 \(X/G\) 就是不同轨道的集合),实际上就是 \(X\) 中本质不同的映射个数。

再定义 \(X^g=\{x\mid g(x)=x,x\in X\}\),称 \(X^g\)\(X\) 在置换 \(g\) 下的不动点集合。也就是一个映射集合中经过置换 \(g\) 后不改变结果的映射个数。

则我们会有 Burnside 引理

\[|X/G|=\dfrac 1{|G|} \sum_{g\in G}|X^g| \]

例:仍然考虑上一节给出的染色问题。

我们最后要求的答案就是 \(|X/G|\)。当 \(g\) 取的是顺时针旋转 \(180^\circ\) 时,\(X^g\) 就是 \(\begin{pmatrix}1&0\\0&1\end{pmatrix},\begin{pmatrix}0&1\\1&0\end{pmatrix},\begin{pmatrix}0&0\\0&0\end{pmatrix},\begin{pmatrix}1&1\\1&1\end{pmatrix}\),所以 \(|X^g|=4\)

所以我们解决这个问题的关键就是求某一置换下不动点的数量。

证明的话可以使用轨道-稳定子定理,如下所示:

\[\begin{aligned} \dfrac 1{|G|} \sum_{g\in G}|X^g|&= \dfrac 1{|G|} \sum_{x\in X}|G^x|\\ &= \sum_{x\in X}\dfrac {|G^x|}{|G|}\\ &=\sum_{x\in X}\dfrac 1{|G(x)|}\\ &=\sum_{S\in X/G}\sum_{x\in S}\dfrac 1{|G(x)|}\\ &=\sum_{S\in X/G}\sum_{x\in S}\dfrac 1{|S|}\\ &=\sum_{S\in X/G}1\\ &=|X/G| \end{aligned} \]

值得注意的是上述结论在 \(X\subseteq B^A\) 的时候依然成立,也就是说及时给映射加上一些限制条件的话 Burnside 引理依然成立。

5 Polya 定理

Polya 定理实际上就是 Burnside 引理的一种特殊情况,其它内容与 Burnside 引理保持一致,形式变为:

\[|X/G|=\dfrac 1{|G|}\sum_{g\in G}|B|^{c(g)} \]

其中 \(c(g)\) 表示置换 \(g\) 拆分出来的轮换数量。证明只需考虑 \(|B|^{c(g)}=|X^g|\) 即可。上文提到过置换可以写成几个轮换的形式,那么如果要求 \(X\) 中的一个映射是关于 \(g\) 的不动点,那么每一个轮换的映射是一样的即可。每一个轮换有 \(|B|\) 种选择,所以 \(|X^g|=|B|^{c(g)}\)

发现此时必须要求每一个映射都合法才行,也就是说 Polya 定理只有在 \(X=B^A\) 时才成立,相比于 Burnside 引理限制要多,但是 \(c(g)\) 有时会比不动点数量好求,此时就应该使用 Polya 定理了。

6 例题

6.1 基础置换群相关

例 1 [POJ2369] Permutations

发现此题求的是给定一个置换,问多少次置换后可以从 \(1\sim n\) 的序列变回来。我们不妨从轮换的角度考虑这个问题,将置换拆成几个轮换,显然只有当进行的次数是某个轮换的长度的倍数的时候,这个轮换中的数字才是有序的。那么为了让所有数字有序,只需要让进行的次数是所有轮换的长度的最小公倍数即可。

求轮换的过程很简单,相当于连边找环。代码如下:

#include <bits/stdc++.h>

using namespace std;

const int Maxn = 2e5 + 5;
const int Inf = 2e9;

int n, a[Maxn];
int len[Maxn], vis[Maxn];

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);
	cin >> n;
	for(int i = 1; i <= n; i++) cin >> a[i];
	int tot = 0;
	for(int i = 1; i <= n; i++) {
		if(vis[i]) continue;//已经在环上了
		tot++;
		int pos = i;
		while(!vis[pos]) {//找环
			len[tot]++;
			vis[pos] = 1;
			pos = a[pos];
		}
	}
	int ans = 1;
	for(int i = 1; i <= tot; i++) {
		ans = ans * len[i] / __gcd(ans, len[i]);
	}
	cout << ans << '\n';
	return 0;
}

例 2 [HNOI2010] 物品调度

\(\text{Link}\)

发现题目中就是要求出 \(pos_i\),只要求出 \(pos_i\) 之后我们就可以用置换相关的知识去求解了。

这个 \(pos_i=(c_i+dx_i+y_i)\bmod n\) 的式子看上去很新颖,我们考虑假如 \(y_i\) 固定,实际上我们就是在不断加 \(d_i\),这样的话我们最后能算出来的数字构成了一个长为 \(\dfrac n{\gcd(n,d)}\) 的环,排序后每两个数之间相差 \(\gcd(n,d)\)

容易发现的是,以不同的数字作为起点,能够形成的环是互不相交的。这就告诉我们 \(y_i\) 的作用在于确定环的编号,而 \(x_i\) 的作用就是在环上找一个点作为答案。我们现在要找到编号 \(c_i\bmod \gcd(n,d)\) 之后第一个还有数字可以选择的环,然后在环上找出 \(c_i+y_i\) 后面第一个可以选择的数,这个数就是 \(pos_i\)

暴力找环的复杂度过高,无法接受,考虑用并查集维护两个过程。如果一个点 \(x\) 被选择了,将它指向 \((x+d)\bmod n\) 的点;同理如果一个编号为 \(y\) 的环被选择完了,将它指向编号 \((y+1)\bmod \gcd(n,d)\) 的环。

最后我们求出了 \(pos_i\),现在将这个置换转成轮换的形式,如果轮换大小为 \(1\) 则不用累加;否则如果轮换中有 \(0\) 加上轮换长度减一,否则加上轮换长度加一。

例 3 [POJ3128] Leonardo's Notebook

我们要求这个置换能不能由两次置换得到。显然我们先考虑将它划分成几个轮换,然后接下来我们需要构造每个轮换怎样由一个置换做两次得到。

现在对于轮换 \((a_0,a_1,\cdots a_{n-1})\),怎么写成置换 \((b_0,b_1\cdots b_{n-1})\) 做两次的结果。不难发现的是,做过两次置换后 \(a_i\) 会变成 \(b_{b_i}\),而理论上最后 \(a_i\) 要变成 \(a_{(i+1)\bmod n}\)

\(n\) 是个奇数的时候,取 \(b_i=a_{(i+(n+1)/2)\bmod n}\),会有 \(b_{b_i}=a_{(b_i+(n+1)/2)\bmod n}=a_{(i+n+1)\bmod n}=a_{(i+1)\bmod n}\),故对于所有奇数长度的轮换,一定可以构造出由一个置换做两次得到。

然后发现当 \(n\) 为偶数的时候,我们难以构造出合适的 \(b_i\)。此时我们发现对于任意一个长为偶数的 \((b_0,b_1,\cdots b_{n-1})\) 的轮换,其进行两次后一定会被分成两个长度相等的轮换。也就是说,我们分割出来的长为偶数的轮换 \((a_0,a_1,\cdots a_{n-1})\),一定是一个长度为 \(2n\) 的轮换分裂出来的。

那么问题就简单了,既然偶数长度的轮换一定是分裂出来的,那么如果偶数长度的轮换无法两两配对即说明无解,否则必有一组解。

6.2 Burnside 引理与 Polya 定理相关

例 1 [HNOI2008] Cards

\(\text{Link}\)

题目中给出的所谓 “洗牌法” 已经把性质提示到眼前了,不难发现这 \(m\) 个洗牌法和恒等置换构成了一个置换群,所以我们可以用上面的两个定理。由于此题的映射不完整(要保证红、蓝、绿颜色个数是给定值),所以不能使用 Polya 定理,那么用 Burnside 引理即可。

我们现在要求的就是对于一个置换的不动点数量,仍然将置换展开成轮换,每个轮换内的颜色必须一致。我们采用类似背包的 dp,设 \(dp(i,j,k,l)\) 表示当前在第 \(i\) 个轮换,三种颜色个数分别为 \(j,k,l\) 的方案,简单 dp 之后套公式求解即可。

例 2 [JZOJ4800] 周末晚会

题意: 在一个环上放 MW 两种字母,W 不能连续放超过 \(k\) 个,问本质不同环的个数。

由于映射有限制,所以仍然考虑 Burnside 定理。现在先考虑置换怎样表示,我们可以认为是顺时针旋转 $1\sim n $ 个人,然后就要考虑置换下的不动点个数。对于旋转 \(d\) 个人,不动点的要求是每 \(\gcd(n,d)\) 个人都是一样的,那么我们可以 dp,设 \(dp(i,0/1)\) 表示总共放了 \(i\) 个人,最后一个放的是男 / 女的方案数,然后进一步我们可以算出放 \(i\) 个人的方案数。

具体的,考虑先断环成链,枚举最开始放了几个女生,然后前缀和优化 dp,可以做到 \(O(nk)\)。累加答案后我们对于 \(sum_i\),枚举它的倍数 \(j\),当 \(\gcd(n,j)=i\) 的时候 \(sum_i\) 都是置换旋转 \(j\) 次的不动点,所以加到不动点总和里,最后除以 \(n\) 就是答案。

例 3 【模板】Polya 定理

\(\text{Link}\)

我们发现此时对环染色不再有映射限制,所以可以考虑使用 Polya 定理了。置换仍然考虑旋转 \(1\sim n\) 次,现在的问题就是求出 \(c(g)\)。同样不难发现,对于旋转 \(i\) 次的置换 \(g\),其 \(c(g)=\gcd(n,i)\)。所以答案即为:

\[\dfrac 1n\sum\limits_{i=1}^n n^{\gcd(i,n)} \]

很显然我们需要进行一些处理,所以做如下变换:

\[\begin{aligned} \dfrac 1n\sum\limits_{i=1}^n n^{\gcd(i,n)}&=\dfrac 1n\sum\limits_{i=1}^n \sum_{d\mid i} n^{d}\cdot [\gcd(n,i)=d]\\ &=\sum_{d\mid n}n^{d-1}\sum\limits_{i=1}^n [\gcd(n,i)=d]\\ &=\sum_{d\mid n}n^{d-1}\sum\limits_{i=1}^{\frac nd} [\gcd(\dfrac nd,i)=1]\\ &=\sum_{d\mid n}n^{d-1}\cdot \varphi(\dfrac nd) \end{aligned} \]

现在问题是怎么求这个式子,看上去如果我们直接暴力求的话复杂度会爆炸,考虑到我们实际上的瓶颈在于求 \(\varphi\) 的复杂度,而这个复杂度就是 \(n\) 的所有因子的根号之和,即 \(\sigma_{0.5}(n)\)。实际上它的上界是 \(O(n^{3/4})\) 的,所以总复杂度为 \(O(Tn^{3/4})\),实际上可以通过。具体证明可以看这个

例 4 [POJ2888] Magic Bracelet

前面的做法和例 2 基本一致,现在的问题是怎样求出不动点个数,即求出长度为 \(i\) 的合法手链个数。考虑设 \(dp(i,j)\) 表示第 \(i\) 个位置放 \(j\) 颜色手链的方案数,则转移方程为 \(dp(i,j)=\sum\limits_{(k,j)\text{ is legal}} dp(i-1,k)\)

由于 \(n\) 过大,所以肯定无法直接转移。发现这个式子完全可以写成一个矩阵乘法的形式,所以我们可以矩阵快速幂优化 dp 进行求解。完了之后再枚举 \(i\) 的倍数 \(j\),用同例 2 的方式统计答案即可。

时间复杂度是 \(O(\sqrt n\times m^3\log n)\) 的,前者是枚举因子 \(i\),后者是矩阵快速幂优化 dp。

例 5 [HNOI2009] 图的同构 / [SHOI2006] 有色图

\(\text{Link1}\)\(\text{Link2}\)

容易发现的是,我们将边的存在与否看成两种颜色,那么第一题就是后一题中 \(m=2,p=997\) 的情况。在此我们只考虑后一种更普遍的情况。

题目中已经告诉了我们置换的内容,就是对点的编号进行置换。那么我们的映射就是点编号到边集颜色的一个映射,这看上去很奇怪,但是你可以理解为这里的映射是对边 \((a_1,a_2),(a_1,a_3),\cdots(a_1,a_n),\cdots,(a_{n-1},a_n)\) 的染色。

于是可以发现一点,虽然映射没有限制,但是这个问题中的 \(A,B\) 集合比较奇怪,无法直接使用 Polya 定理,不妨先用 Burnside 引理入手。假如给定了一个置换,现在我们要求出其中的不动点集合,也就是一种对边的染色方案使得其置换后不变。考虑分类讨论:

  • 假如该边连接的端点在同一个轮换内。由于轮换构成了一个环,所以这条边会在整个环上走一圈,那么这些边的颜色必须一致。
  • 假如该边连接的端点不在同一个轮换内。由于端点在两个轮换上,所以边的两个端点会在环上不断走,因此再回到原状态的时候应该走过了两个环长度 \(a_i,a_j\)\(\text{lcm}\),这些边的颜色必须一致。

此时我们发现,这里面出现了和 Polya 定理类似的情况,即有一些边的颜色必须一致。假设这样的边集有 \(k\) 个,则不动点个数就是 \(m^k\),实际上转化为了 Polya 定理中的情况。考虑 \(k\) 的值,在第一种情况中,边的端点在环上不同的距离(取较小的)就对应不同的边集,所以有 \(\lfloor\dfrac {a_i} 2\rfloor\) 个边集;在第二种情况中,这两个轮换之间共 \(a_i\cdot a_j\) 条连边,每一次有 \(\text{lcm}(a_i,a_j)\) 条边划分到一个边集中,所以共有 \(\gcd(a_i,a_j)\) 个边集。

此时答案就是 \(\dfrac 1{n!}\sum\limits_{g\in G} m^k\)。暴力枚举时间复杂度 \(O(n!)\) 的,考虑优化。我们不再考虑每一个置换拆出来的轮换的贡献,相反,考虑每一种不同的 \(a_i\) 序列(不考虑顺序)有多少个置换与之对应。先爆搜拆出 \(a_i\),然后利用组合数学算方案数。

具体的,我们要先将 \(n\) 划分成几个大小为 \(a_1,a_2,\cdots a_m\) 的集合,这个的方案数显然是 \(\dfrac{n!}{\prod a_i!}\)。然后每一个集合内部的元素要放在一个环上排序,这个的方案数同样显然为 \(\dfrac{a_i!}{a_i}=(a_i-1)!\)。最后还有一点,我们在选择集合的时候,对于 \(a_i\) 相等的集合无需考虑其顺序,所以还要除以 \(\prod c_i!\),其中 \(c_i\) 为每种 \(a\) 的出现次数。

所以方案数的式子是 \(\dfrac {n!}{\prod a_i\prod c_i!}\)。再乘上前面的部分就可以得到答案为:

\[\sum \dfrac{m^k}{\prod a_i \prod c_i!} \]

暴力求出答案即可。复杂度就是爆搜的复杂度,\(n\le 60\) 很小可以通过。

posted @ 2024-12-27 16:31  UKE_Automation  阅读(245)  评论(0)    收藏  举报