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 ( \begin{array}{**lr**} a_1 & a_2 & \cdots & a_n\\ a_{p_1} & a_{p_2} & \cdots & a_{p_n} \end{array} \right ) \),表示将 \(a_i\) 映射为 \(a_{p_i}\)
(其中,\(p_1,p_2, \cdots ,p_n\)\(1\)\(n\) 的一个排列)
\(S\) 上所有置换的数量为 \(n!\)
置换的乘法
对于两个置换 \(f= \left ( \begin{array}{**lr**} a_1 & a_2 & \cdots & a_n\\ a_{p_1} & a_{p_2} & \cdots & a_{p_n} \end{array} \right ) \)\(g= \left ( \begin{array}{**lr**} a_{p_1} & a_{p_2} & \cdots & a_{p_n}\\ a_{q_1} & a_{q_2} & \cdots & a_{q_n} \end{array} \right ) \)
\(f\)\(g\) 的乘积记为 \(f \circ g\)
\(f \circ g=\) \( \left ( \begin{array}{**lr**} a_1 & a_2 & \cdots & a_n\\ a_{q_1} & a_{q_2} & \cdots & a_{q_n} \end{array} \right ) \)
本质上,就是让 \(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 ( \begin{array}{**lr**} a_1 & a_2 & \cdots & a_{n-1} & a_n\\ a_2 & a_3 & \cdots & a_n & a_1 \end{array} \right ) \)
若两个循环置换不含有相同的元素,则称它们是不相交的。
任意一个置换都可以分解为若干个不相交的循环置换的乘积。

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\ (\bmod \ n)\)
这个式子等价于 \(ki \bmod 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 引理即可。

posted @ 2020-12-28 10:55  BBD186587  阅读(561)  评论(0编辑  收藏  举报