Polya 定理

一些概念


设有一个集合 (G) ,再设一种作用于 (G) 的二元运算 (X)
若其满足以下 (4) 个性质,则称其为一个群,记为 ((G,X))
(1.) 封闭性:若 (a in G)(b in G) ,则有 (a X b in G)
(2.) 结合律:对于任意 (a in G)(b in G)(c in G) ,有 ((a X b) X c=a X (b X c))
(3.) 单位元:存在 (e in G) ,使得对于任意 (a in G) ,有 (a X e=e X a) 。称 (e) 为单位元,单位元唯一。
(4.) 逆元:
对于任意 (a in G) , 存在 (b in G) ,使得 (a X b=b X a=e) (此处的 (e) 指单位元)。
(b)(a) 的逆元,记 (b=a^{-1}) 。逆元也唯一。
子群
((G,X)) 是群, (S)(G) 的非空子集,且 ((S,X)) 也是群,则称 ((S,X))((G,X)) 的子群。
置换
一个集合 (S={a_1,a_2, cdots ,a_n}) 上的置换可以表示为 (f= left ( egin{array}{**lr**} a_1 & a_2 & cdots & a_n\ a_{p_1} & a_{p_2} & cdots & a_{p_n} end{array} ight ) ),表示将 (a_i) 映射为 (a_{p_i})
(其中,(p_1,p_2, cdots ,p_n)(1)(n) 的一个排列)
(S) 上所有置换的数量为 (n!)
置换的乘法
对于两个置换 (f= left ( egin{array}{**lr**} a_1 & a_2 & cdots & a_n\ a_{p_1} & a_{p_2} & cdots & a_{p_n} end{array} ight ) )(g= left ( egin{array}{**lr**} a_{p_1} & a_{p_2} & cdots & a_{p_n}\ a_{q_1} & a_{q_2} & cdots & a_{q_n} end{array} ight ) )
(f)(g) 的乘积记为 (f circ g)
(f circ g=) ( left ( egin{array}{**lr**} a_1 & a_2 & cdots & a_n\ a_{q_1} & a_{q_2} & cdots & a_{q_n} end{array} ight ) )
本质上,就是让 (a_1,a_2, cdots ,a_n) 先经过 (f) 的映射,再经过 (g) 的映射。
置换群
同样设一个集合 (S={a_1,a_2, cdots ,a_n}) ,
可以得到,集合 (S) 上的所有置换关于置换的乘法构成一个群。
这个群的任意一个子群即称为置换群。
循环置换
循环置换是一类特殊的置换,可表示为
((a_1,a_2, cdots ,a_n)=) ( left ( egin{array}{**lr**} a_1 & a_2 & cdots & a_{n-1} & a_n\ a_2 & a_3 & cdots & a_n & a_1 end{array} ight ) )
若两个循环置换不含有相同的元素,则称它们是不相交的。
任意一个置换都可以分解为若干个不相交的循环置换的乘积。

Burnside 引理

对于一个置换 (f) ,若 (S) 经过置换后不变,则称 (S)(f) 的不动点。
(C(S)) 表示 (S) 这个置换的不动点数量, (L) 表示本质不同的方案数(即答案) ,
(L=frac{1}{|G|} sum limits_{a in G} C(a))
其中, (G) 为一个置换群,是会产生等价方案的置换的集合。 (|G|) 表示 (G) 的大小。
(例如,在染色问题中,(G) 即为所有翻转操作的置换的集合)
但是,计算不动点个数过于繁琐,所以引入 Polya 定理。

Polya 定理

其实, Polya 定理和 Burnside 定理并没有本质上的区别,仅仅是优化了计算不动点个数的部分。
设两个集合 (A)(B) ,表示问题本质上就是从 (A)(B) 的映射。
(例如,同样在染色问题中,(A) 为点集, (B) 为颜色的集合)
定义 (c(S)) 表示置换 (S) 能拆分成的不相交的循环置换的数量,
(L=frac{1}{|G|} sum limits_{a in G} |B|^{c(a)})
证明
考虑若 (S) 是置换 (f) 的不动点,则对于 (f) 可拆分成的每个不相交的循环置换, (S) 中这些元素的值一定是相等的。
每个循环置换可以分配到一个值,共有 (|B|) 个值,所以 (C(a)=|B|^{c(a)})
把上式代入 Burnside 引理,即可得到 Polya 定理。

例题

1
有一个长度为 (n) 的环,上面写着'X'和'E',问本质不同的环有多少种。((n leq 200000))
(本质不同,指经过旋转后不同)
在这个问题中, (G) 就是旋转 (1)(n-1) 次分别对应的置换。
所以,这个问题本质上就是在求旋转 (i) 次时对应的置换所能拆分成的不相交的循环置换的数量。
考虑旋转 (i) 次时, (1) 会映射到 (i+1) , 再映射到 (2i+1) (cdots)
显然,它们处于同一个循环置换中。
所以,单个循环置换的大小就是找到一个最小的 (k) ,使得 (ki+1 equiv 1 (mod n))
这个式子等价于 (ki mod n=0) ,所以 (k=frac{lcm(n,i)}{i})
因为每个循环置换长度相等,所以这个置换能拆分成 (frac{ni}{lcm(n,i)}=gcd(n,i)) 个循环置换。
套用 Polya 定理算即可。
接下来,考虑一个加强的版本。
(n) 种颜色,且 (n leq 10^9)
想要优化复杂度,只能优化式子。
(frac{1}{n} sum limits_{i=1}^nn^{gcd(n,i)})
枚举 gcd ,变为
(frac{1}{n} sum_{d|n}n^d*sum limits _{i=1}^{frac{n}{d}}[gcd(i,frac{n}{d})=1])
(frac{1}{n} sum_{d|n}n^d*varphi(frac{n}{d}))
其中,欧拉函数可以直接暴力算。
2.[HNOI2008]Cards
因为题目中有这样一句限制,
输入数据保证任意多次洗牌都可用这 m 种洗牌法中的一种代替,且对每种洗牌法,都存在一种洗牌法使得能回到原状态。
所以,所有洗牌法构成的集合满足封闭性、结合律、有逆元。
但是,还没有单位元,所以并不能构成群,无法使用 Burnside 引理或 Polya 定理计算。
所以,要加入一个自己映射到自己的置换,这样就有单位元了,且不会对答案产生影响。
因为有每种颜色数量的限制,所以不能用 Polya 定理,所以考虑用 Burnside 引理。
对于每个置换,算出它能拆分成的每个循环置换的大小,用类似背包的方法求出方案数,套用 Burnside 引理即可。

原文地址:https://www.cnblogs.com/zhs1/p/14165047.html