1.置换。
大概学过抽象代数的同学都知道这个概念吧。
置换简单来说就是对元素进行重排列,如下图所示。置换是
[1,n]
到
[1,n]
的一一映射。
再比如,将正方形绕其中心逆时针旋转90度,可以看成是正方形四个顶点的一个置换。关于置换、置换群的具体理论,可以学一下抽象代数。
(1)置换可以分解成若干循环,方法为:连边
1−>a1,2−>a2,…,i−>ai,…,n−>an
,任取一个元素,顺着有向边走,直到回到出发点,即形成一个环,剩余元素也是这样。
(2)如果一个状态经过置换
f
后跟原来相同,即
S[1]=S[a1],S[2]=S[a2],…,S[n]=S[an]。
则称该状态为
f
的不动点。
(3)题目中常常出现“本质不同的方案数”,一般是指等价类的数目,题目定义一个等价关系,满足等价关系的元素属于同一等价类。等价关系通常是一个置换集合
那么,置换构成的群就是置换群,就是交换排列顺序而已。
2.
Burnside
引理:
对于一个置换
f
,若一个染色方案
百度百科的定义:
设
G=a1,a2,…ag
是目标集
[1,n]
上的置换群。每个置换都写成不相交循环的乘积。 是在置换
ak
的作用下不动点的个数,也就是长度为
1
的循环的个数。通过上述置换的变换操作后可以相等的元素属于同一个等价类。若
举个例子:
一正方形分成
4
格,
对于每种格子我们都有两种选择,所以会有一下
16
种方案: (百度百科)
但是对于这16种方案可以归一下类:
Θ不动:a1=(1)(2)…(16)
Θ逆时针转90度 :a2=(1)(2)(3 4 5 6)(7 8 9 10) (11 12)(13 14 15 16)
Θ顺时针转90度 :a3=(1)(2)(6 5 4 3)(10 9 8 7)(11 12)(16 15 14 13)
Θ转180度:a4=(1)(2)(3 5)(4 6)(7 9)(8 10)(11)(12) (13 15)(14 16)
(a,b,c)
表示
a,b,c
可以通过旋转得到。
由
Burnside
引理,共有
(16+2+2+4)4=6
(种方案).
burnside
是一种计数方法,用来计算含有不等价类的数量
burnside
算法的关键是找好“置换群”。
例题:
POJ 2154
PE 281
利用
Burnside
引理要首先列出所有
nm
种可能的染色方案,然后找出在每个置换下保持不变的方案数。显然当
m
或
3.
polya
定理
polya
定理实际上是
burnside
引理的具体化,提供了计算不动点的具体方法。
假设一个置换有
k
个循环,易知每个循环对应的所有位置颜色需一致,而任意两个循环之间选什么颜色互不影响。因此,如果有
∑|F|i=0mki|F|
其中 |F| 表示置换的数目, ki 表示第 i 个置换包含的循环个数。
还是这个例子吧。
Θ不动:a1=(1)(2)(3)(4)
Θ旋转90度 :a2=(1 2 3 4)
Θ旋转180度 :a3=(1 3)(2 4)
Θ旋转270度:a4=(1 4 3 2)
比如,“逆时针旋转180度”,这个置换写成循环的乘积就是(1,3)(2,4),即1和3互变,2和4互变,不难发现,1和3的颜色必须相同,2和4的颜色也必须相同,而1-3和2-4的颜色互不相干。
由
可以看
Burnside
引理和
Polya
定理是一样的,
Polya
定理是
Burnside
引理的优化。
例题:
POJ 1286
除此之外还有很多例题的,不详细列出来了。