CPC 算法笔记——置换和 Polya 定理

1 min168 words
Legacy
Contents

置换

置换即 [ ⁣[1,n] ⁣]≜{1,2,…,n}[\![1, n]\!] \triangleq \{1, 2, \dots, n\} 到自身的 1-1 变换:[ ⁣[1,n] ⁣]→[ ⁣[1,n] ⁣][\![1, n]\!] \rightarrow [\![1, n]\!]

p:i→ai,(ai≠aj,i≠j)p: i \rightarrow a_i, (a_i \neq a_j, i \neq j),

其中 a1,a2,…,ana_1, a_2, \dots, a_n 是 [ ⁣[1,n] ⁣][\![1, n]\!] 的一个全排列,

称此置换为 nn 阶置换,记为:

p=(12⋯na1a2⋯an)p = \left( \begin{matrix} 1 & 2 & \cdots & n \\ a_1 & a_2 & \cdots & a_n \end{matrix} \right)

nn 阶置换共有 n!n! 个。

置换的乘法

定义 p1p2p_1p_2 表示先做 p1p_1 的置换,再做 p2p_2 的置换,如:

p1=(12343124), p2=(12344321)p_1= \left( \begin{matrix}1&2&3&4\\3&1&2&4 \end{matrix} \right) ,\ p_2= \left( \begin{matrix}1&2&3&4\\4&3&2&1 \end{matrix} \right)

则

p1p2=(12343124)⋅(12344321)=(12343124)⋅(31242431)=(12342431)\begin{align*} p_1p_2&= \left( \begin{matrix} 1&2&3&4\\3&1&2&4 \end{matrix} \right) \cdot \left( \begin{matrix} 1&2&3&4\\4&3&2&1 \end{matrix} \right) \\ &= \left( \begin{matrix} 1&2&3&4\\3&1&2&4 \end{matrix} \right) \cdot \left( \begin{matrix} 3&1&2&4\\2&4&3&1 \end{matrix} \right) \\ &= \left( \begin{matrix} 1&2&3&4\\2&4&3&1 \end{matrix} \right) \end{align*}

即

p1=(12⋯na1a2⋯an)p_1= \left( \begin{matrix} 1&2&\cdots&n\\a_1&a_2&\cdots&a_n \end{matrix} \right) p2=(12⋯nb1b2⋯bn)=(a1a2⋯anb1(a1)b2(a2)⋯cn(an))p_2= \left( \begin{matrix} 1&2&\cdots&n\\b_1&b_2&\cdots&b_n \end{matrix} \right) = \left( \begin{matrix} a_1&a_2&\cdots&a_n\\b_1(a_1)&b_2(a_2)&\cdots&c_n(a_n) \end{matrix} \right) ∴p1p2=(12⋯nb1(a1)b2(a2)⋯bn(an))\therefore p_1p_2= \left( \begin{matrix}1&2&\cdots&n\\b_1(a_1)&b_2(a_2)&\cdots&b_n(a_n)\end{matrix} \right)

置换群

[ ⁣[1,n] ⁣][\![1, n]\!] 上所有置换按上述乘法构成一个群,即满足封闭性、结合律、有单位元、有逆元:

p1=(11⋯111⋯1)p_1=\left( \begin{matrix}1&1&\cdots&1\\ 1&1&\cdots&1\end{matrix} \right) p−1=(a1a2⋯an12⋯n)p^{-1}=\left( \begin{matrix}a_1&a_2&\cdots&a_n\\1&2&\cdots&n\end{matrix} \right)

我们称此群为 n 个对象的对称群,记为 SnS_n。

SnS_n 的任意一个子群称为置换群。

Polya 定理

设 Gˉ\bar G 是 n 个对象的一个置换群,用 m 种颜色对这 n 个对象染色,则不同的染色方案数为:

L=1∣G‾∣∑i=1gmc(Pi‾)L=\frac{1}{|\overline G|}\sum_{i=1}^{g}m^{c(\overline{P_i})}

其中 G‾={P1‾,P2‾,…,Pg‾}\overline G=\{\overline{P_1}, \overline{P_2}, \dots, \overline{P_g}\},c(Pk‾)c(\overline{P_k}) 为 Pk‾\overline{P_k} 的循环节数。

Contents