Polya定理

先简单介绍一下置换群burnside引理

置换群


满足如下性质:
1. 封闭性
2. 结合性
3. 单位元
4. 逆元
置换群
置换群 S n 满足群的所有性质, S n 中的元素:置换。
置换可表示为如下形式:其中, a i 为1到n的排列。
( 1 2 3 n a 1 a 2 a 3 a n )
定义置换 p 的乘法运算:
p 1 = ( 1 2 3 4 3 1 2 4 ) p 2 = ( 1 2 3 4 4 3 2 1 )
p 1 p 2 = ( 1 2 3 4 3 1 2 4 ) ( 1 2 3 4 4 3 2 1 ) = ( 1 2 3 4 3 1 2 4 ) ( 3 1 2 4 2 4 3 1 )
= ( 1 2 3 4 2 4 3 1 ) = ( 1 2 4 ) ( 3 ) = ( 3 ) ( 1 2 4 )

burnside引理

可将任一置换 p 分解为若干不相交的循环的乘积。
接下来提到的置换,默认将置换 p 分解为若干不相交的循环的乘积。
共轭类
p = ( 1 2 3 4 5 2 1 4 5 3 ) = ( 1 2 ) ( 3 4 5 )
将一个循环的长度称为一个循环的阶, k 阶循环出现 c k 次,用 ( k ) c k 表示。如 p = ( 2 ) 1 ( 3 ) 1 .
S n 中具有相同格式的置换全体构成一个共轭类。
S n 中属于 ( 1 ) c 1 ( 2 ) c 2 ( 3 ) c 3 ( n ) c n 共轭类的元素个数:

n ! i = 1 n ( c i ! i c i )

k 不动置换类
设置换群 G = { p 1 , p 2 , , p g }
G 中使 k 保持不变的置换全体,称为 k 不动置换类,记做 Z k .
等价类
定义关系 R : p i G , 使 k j ,则称 k R j .
如果满足:
1. k R k (自反性)
2. k R j , j R k (对称性)
3. k R j j R l k R j (传递性)
则称 R [ 1 , n ] 上的一个等价关系。
置换群 G [ 1 , n ] 划分成了若干等价类,元素 k 所属的等价类记为 E k
结论
| E k | | Z k | = | G |
burnside引理
c 1 ( p k ) 是置换 p k 中不动点(长度为1的循环)的个数,则 G 中不同等价类的个数:
L = i = 1 g c 1 ( p i ) | G |

进入正题

Polya定理

G = { p 1 , p 2 , , p g } 是n个对象的一个置换群,记 c ( p i ) 为置换 p i 的循环节数, 用m种颜色染这n个对象,则不同的染色方案数为:
L = i = 1 g m c ( p i ) | G |
所以,计数时只需统计当循环节数为 k 时,对应置换有多少个即可。
假设当循环节数为 k 时,对应置换有 a [ k ] 个,则不同的染色方案数为:
L = i = 1 n ( a [ k ] m k ) | G |
当然,如果这并不是一个单纯的染色,可能涉及到一些限制时,你可以将 m c ( p i ) 替代为在置换 p i 下染色的方案数 f ( i ) ,由于不同循环间相互独立,而同一循环中的元素染色相同,所以 f ( i ) 等于每一个循环的染色方案数的乘积。
UVA 11540 Sultan’s Chandelier 原题链接
UVA 11540 Sultan’s Chandelier 题解

推广1:母函数形式的Polya定理

如果我们已经确定了m种颜色的状态(某种颜色i染k[i]个对象),要求在这种状态下的方案数,就要用到母函数形式的Polya定理。
接下来我们用 x i 表示颜色 i ,对于某一个置换 p i c ( p i ) 为置换 p i 的循环节数, c k ( p i k ) 为置换 p i 中长度为 k 的循环的数目。
m c ( p i ) P = k = 1 m ( i = 1 m x i k ) c k ( p i k ) 形式代替形成以 x 1 , x 2 , , x m 为变元的 n 次对称多项式 P ( x 1 , x 2 , , x m )
在置换 p i 下,颜色状态为 i = 1 m x i k i 方案数即为多项式 P 展开后项 i = 1 m x i k i 的系数。
那么,该颜色状态的方案数即为置换群 G 中所有置换对应的多项式展开后项 i = 1 m x i k i 的系数之和。
这样说似乎有些抽象,具体实现过程可以看这里
UVA 10601 Cubes 原题链接
UVA 10601 Cubes 题解

推广2:图的计数

简单图的计数相当于对有 n 个无标志顶点的完全图用两种颜色进行着色的不同方案数。
首先,考虑点置换与边置换的关系:
一条边连接了两个点,那么对于这两个点,考虑他们在某个置换中的位置:
若这两个点在同一个循环中,那么边的循环的个数为点的循环的个数的一半。
若这两个点不在一个循环中,那么边的循环的个数为 g c d ( a , b ) , a , b 为这两个点所在的点循环的长度。(可以画个图,看一看就知道了)
好吧,我还是,画一画吧。水平有限,应该勉强能看吧。

其次,考虑如何找出所有的置换:
如果 n 比较小,可以暴力枚举,时间为 n ! (点的全排列)
n 比较大的时候,由于属于同一共轭类的置换对答案的贡献是相同的,所以考虑枚举一个共轭类,求出这个形式的置换的着色方案数,再乘以该形式的置换的数目,即 n ! i = 1 n ( c i ! i c i ) ( c i 为长度是 i 的循环的个数).
现在已经确定了一种点的置换的形式,那么对应的边的着色方案数如上文所说,考虑两个点是否在同一置换中即可。
例题:BZOJ 1488 图的同构
BZOJ 1488 图的同构 题解
一些题目:
比较模板的题:
The Colored Cubes UVA 10733:立方体涂色问题,基础模板,不解释。
Necklace of Beads POJ 1286:用三种颜色图一串项链的方案数。
考虑旋转和翻转,旋转就枚举旋转的长度i=1~n,循环数目就是 g c d ( i , n ) ,翻转要分成两种情况:
n为偶数:选择一颗珠子,以这颗珠子到项链圆心的连线为轴翻转,置换的数目是n/2(显然,这根轴还穿过了另一颗珠子,所以是n/2),置换中循环的数目是n/2+1(两个不动置换和n/2-1个2阶置换)。或选择相邻的两颗珠子,以他们的中点到项链圆心的连线为轴翻转,置换的数目是n/2,置换中循环(2阶循环)的数目是n/2。
n为奇数:选择一颗珠子,以这颗珠子到项链圆心的连线为轴翻转,置换的数目是n,置换中循环的数目是(n+1)/2。
无论n为奇数还是偶数,所有置换的数目都是2n。
The Queen’s New Necklaces UESTC 75:用ki个颜色为i的珠子能串成多少不同的项链。
母函数形式的Polya定理,求出系数和即可。
Count the Tetris HDU 1812:用C种颜色染n*n的棋盘的方案数。
考虑旋转0度,90度,180度,270度,这道题比较困难的是要写高精度。
变式:
Magic Bracelet POJ 2888:用m种颜色染一个n颗珠子的手镯(只旋转,不翻转)的方案数,但是有限制,要求某两种颜色不能相邻。 ( 1 m 10 ) ( 1 n 10 9 )
如果没有限制,这道题就是个板题了,然而~~。
如果不旋转,这道题就等价于:在一个有m点的图中(一个点代表一个颜色),求从任意点开始,走n步再回到起点的方案数。图上不能相邻的两种颜色之间没有边。
由于m比较小,n比较大,所以用矩阵快速幂可以解决这个简化的问题。
现在考虑旋转:当旋转的长度为i时,循环数目就是gcd(i,n),这样的置换是唯一的,但我们可以发现不同的gcd(i,n)最多只有 2 n 个。所以我们不妨枚举gcd(i,n),即 n 枚举n的因子,符合gcd(i,n)=k (i≤n) 的 i 显然有 ϕ ( n k ) 个,即循环的数目为k的置换有 ϕ ( n k ) 个。
所以,答案加上为走k步回到起点的方案数乘 ϕ ( n k ) ,最后答案再除以n(有n个置换)

猜你喜欢

转载自blog.csdn.net/qq_41343943/article/details/82431559