前言
之前根据别人的博客学习(Polya)定理,不知道为什么总是一脸懵逼。
今天在法老建议下,去翻了翻集训队论文《Pólya原理及其应用》,一点一点看下来突然就懂了?
群
最基础的定义。
对于一个集合(G)以及一个给定的二元运算(*),满足以下条件:
- 封闭性: 对于(G)中所有(a,b),(a*b)都在集合中。
- 结合律: 对于(G)中所有(a,b,c),满足((a*b)*c=a*(b*c))。
- 单位元: 在(G)中存在一个(e),满足对于(G)中所有的(a),都有(a*e=e*a=a)。
- 逆元: 对于(G)中所有的(a),都存在一个同在(G)中的(b),满足(a*b=e)。
于是就称集合(G)在运算(*)之下是一个群。
一个简单的公式
[|E_k| imes |Z_k|=|G|
]
此处(G)是一个(1sim n)的置换群(置换群的定义比较简单,相信大家都会),而(k)是(1sim n)的某个元素。
- (Z_k)((k)不动置换类): (G)中使(k)保持不变的所有置换记作(Z_k),简称(k)不动置换类。
- (E_k)(等价类):(k)在(G)的作用下能够变化得到的所有元素记作(E_k)。
根据定义,其实很容易就能证明上面公式的正确性。
(Burnside)引理
首先介绍一个新的定义:
- (D(a_j)):在置换(a_j)下不变的元素个数。
由于(|Z_k|)表示的是使(k)不变的置换个数,(D(a_j))表示的是置换(a_j)下不变的元素个数,二者显然有一个等量关系:
[sum_{k=1}^n|Z_k|=sum_{j=1}^sD(a_j)
]
然后,我们假设共有(N={1,2,...,n})中共有(L)个等价类(注意,(L)就是一般情况下我们要求的东西),即设:
[N=E_1+E_2+...+E_L
]
我们重新考虑(sum_{k=1}^n|Z_k|),就可以发现:
[sum_{k=1}^n|Z_k|=sum_{i=1}^Lsum_{kin E_i}|Z_k|=sum_{i=1}^L|E_i| imes|Z_i|
]
根据最早的那个公式,(|E_k| imes |Z_k|=|G|),得到:
[sum_{k=1}^n|Z_k|=L imes |G|
]
单独保留(L),得到:
[L=frac1{|G|}sum_{k=1}^n|Z_k|=frac1{|G|}sum_{j=1}^sD(a_j)
]
(Polya)定理
考虑到在(Burnside)引理中,(D(a_j))依旧不好算。
我们定义一个置换(g_i)的循环个数为(c(g_i))。
容易发现,对于(g_i)同一循环节中的元素涂上相同颜色所得方案数(m^{c(g_i)}),就等于(a_i)作用下不变的图象数。
也就是说:
[L=frac1{|G|}sum_{i=1}^sm^{c(g_i)}
]
这就是(Polya)定理的公式了。
模板题
可以看看这篇失败的博客:入门失败的Polya定理。