本文以群论的一些基本概念及定理证明为主,且多为信息学竞赛所应用,如有不当之处,还望指正
本文对burnside引理与Polya定理仅作引入与证明,达到初步理解的目的,不作深入讨论,具体题目和实现方法会在以后的博文中有所提及
如果从公式化地来说,群G是一个定义在二元组 (S,⋅) 的代数结构
S 是一个集合, ⋅ 是一个二元运算符,并不是指乘号,比如平常我们在数集上所使用的 + − × ÷ ,集合运算中使用的 ∪ ∩ 都是二元运算
满足下列条件的二元组 G=(S,⋅) 可以称为群
∀x,y∈S,x⋅y∈S
通俗来讲,就是集合 S 中任取两个元素,它们 ⋅ 运算后的结果也是 S 中的元素
比如 S 是二维向量集, ⋅ 是点积,显然这个二元组不是群,因为运算得到的元素不属于 S
∀x,y,z∈S,(x⋅y)⋅z=x⋅(y⋅z)
这个比较简单,不说了
∃e∈S,∀x∈S,e⋅x=x⋅e=x
例如
S=Z,⋅=+ 时, e=0
S=R,⋅=× 时, e=1
S=N+,⋅=− 时,没有单位元
如果 G 是加法群时, G 中的单位元换叫做“零元”,记为 0
∀x∈S,∃y∈S,x⋅y=y⋅x=e
在这种情况下我们可以把 y 写成 x−1
例如
S=Z,⋅=+ 时, x−1=−x
S=R,⋅=× 时, x−1=1x ,所以这个二元组不是群,因为0不是逆元
显然 (S=N,⋅=+) , (S=Z,⋅=×) 不是群,因为它们中并不是所有的元素都有逆元
在群中,每个元素都是有逆元的
其实还有左右逆元之分,但是在群中,左逆元 = 右逆元
证明:
∀x∈G , ∃a∈G,a⋅x=e ,即 a 是 x 的左逆元
显然
∃b∈G,b⋅a=e
那么
x⋅a=(b⋅a)⋅(x⋅a)=b⋅(a⋅x)⋅a=b⋅a=e
即 a 也是 x 的右逆元
如果 G 是加法群时,a的逆元改叫做“负元”,并记为 −a
G 中所含元素的个数,称为群 G 的阶,记为 |G| ,即S中所含元素的个数
因此 G 可以根据 |G| 是否为 +∞ ,分为有限群和无限群
实际上 G 中的元素也有阶的定义,此处作为了解
在群 G 中, a∈G 。如果有整数k,使 ak=e ,那么使这个等式成立的最小正整数k叫做a的阶,记为 k=|a|
( ak 表示连续k个a进行 G 中规定的运算,不是传统意义上的k个a相乘)
如果这样的k不存在,则称a的阶是无限的,记为 a=+∞
其实早在小学我们就接触过一些
b=c⇔a+b=a+c
b=c⇔a×b=a×c (a≠0)
对于群中的消去律来说,它的定义是 x=y 与 x⋅a=y⋅a 互为充分必要条件
注意这里的 x,y,a 都是指的是群中的任意元素
当S是有限集,在具有封闭性,结合律和单位元的二元组(S,·)里,逆元存在 ⇔ 消去律存在
证明:
先说简单的,逆元存在 ⇒ 消去律存在
只要在 x⋅a=y⋅a 两边同时乘以 a−1 就可以了
消去律存在 ⇒ 逆元存在
对于 a∈S ,建立一个新二元组 (S′={x⋅a|x∈S},⋅)
根据封闭性, S′⊆S ,
而且由于不会存在类似 x⋅a=y⋅a 这样的重复元素情况(因为消去律的存在保证这种情况下 x=y ,违背集合元素的不重复性),所以 |S′|=|S|
所以 S′=S
又因为 e∈S ,所以 e∈S′
所以 ∃t∈S,t⋅a=e
t就是a的逆元了
在说置换群之前,我们先来谈谈置换
n个元素1,2,…,n之间的一个置换为
(1,2,3,...,na1,a2,a3,...,an)
表示1被 a1 取代,2被 a2 取代…n被 an 取代,其中 a1,a2,...,an 是 [1,n] 的一个排列
我们称其为一个n元置换
对于每一个置换,我们可以理解成由一个元素变成另一种元素,即对目标集 [1,n] 的一种重新排列,如果还是不理解,可以看下面这个例子
(1,2,3,43,1,2,4)
在这个四元置换下
对序列 1,2,3,4 经过置换就成了 3,1,2,4 ,
对 3,1,2,4 再置换就成了 2,3,1,4
容易发现置换中列的位置是可以改变的,也就是说
(1,2,3,43,1,2,4)=(4,2,3,14,1,2,3)
当n相等时,置换是可以相互运算的,我们称之为置换的连接,下文中我们将两个置换 a,b 写成 ab 的形式即是 a,b 的连接运算,运算规则如下
(1,2,3,...,na1,a2,a3,...,an)(a1,a2,a3,...,anb1,b2,b3,...,bn)=(1,2,3,...,nb1,b2,b3,...,bn)
显然置换的连接满足结合律,但不满足交换律
记一个n阶循环为
(a1a2,…an)=(a1,a2,...,ana2,a3,...,a1)
两个循环 (a1a2a3..an),(b1b2b3..bm) 不相交是指对于 ai (i∈[1,n]) 来说,不存在 bj (j∈[1,m]) ,使得 ai=bj
因此置换也可以写成若干个互不相交的循环的乘积
例如上面举的这个例子,写成循环就是 (1,2,3)(4)
数学归纳法的证明如下:
首先 n=1 时显然成立
当 n≥2 时,我们可以想象成在原来的n-1阶不相交循环里新加入了一个点n,设 i→ai 变成了 i→n ,这样 [1,n] 的排列a就缺少了 ai ,所以 n→ai ,显然这样操作之后仍然满足“互不相交的循环”
定义“n-循环节数”是奇数的置换为奇置换
“n-循环节数”是偶数的置换为偶置换
或者我们可以认为变成单位置换需要奇数次对换的置换为奇置换
变成单位置换需要偶数次对换的置换为偶置换
我们可以把每个循环看做是单位置换进行若干次对换得到的
比如循环 (a1a2..an) 是单位置换依次进行对换 (a1,a2),(a1,a3)..(a1,an) 得到的
(所以如果由 (a1a2..an) 变回单位置换,就是依次进行对换 (an,a1)..(a3,a1)(a2,a1) )
更进一步来说,每个置换都可以看做是单位置换进行若干次对换得到的
因此对于两个置换的连接,我们可以看做是这两个置换所包含的对换的连接,也就是说新置换进行“这两个置换对换次数之和”次对换一定能够变回单位置换,所以
奇置换·奇置换=偶置换
偶置换·偶置换=偶置换
奇置换·偶置换=奇置换
偶置换·奇置换=奇置换
再谈谈我对置换群定义的理解
具体来说,置换群中的元素是一些置换,运算是置换的连接。
比如对于一个 4×4 的棋盘,我们可以对它上面的格子进行编号,那样它就可以抽象成一个 [1,16] 的集合
然后我们规定8种置换:不动,左转90°,右转90°,旋转180°,以及翻折后的这四种操作
在这8种置换下,每个位置上的格子 ai 都会变成另一个格子 bi
任意两个置换进行运算都可以得到这四种置换中的一种(封闭性)
置换又满足结合律
各元素的映射是其自身的置换是单位元 e
而且每种置换都存在逆元
所以它们就可以组成一个置换群了
容易发现,把任意置换倒过来,各循环中元素不变,循环个数不变
即 (1a12a23a3......nan) 与 (a11a22a33......ann)
写成循环形式后循环个数和各循环中元素不变,因为每个置换我们都可以看做若干个不相交的有向环,倒过来以后实际上就是把每个环中的边反向,所以环的个数和大小不变
设H是群G的子群,对于 a∈G , {ah|h∈H} 表示H的一个左陪集,记作 aH ;
{ha|h∈H} 表示H的一个右陪集,记作 Ha .
陪集有一些性质(由于左右陪集证明方法同理,因此下面证明仅讨论左陪集的情况):
注:下面的 a,b∈G
这个证明比较简单,因为结合律的存在,使得 a⋅h(h∈H) 不会有重复.
因为 H 是一个群,所以 e∈H ,所以 a=a⋅e∈aH
a∈Ha 同理
先说 aH=H⇒a∈H :
由性质2得 a∈aH ,所以 a∈H
再说 a∈H⇒aH=H :
设H中的集合为 {x1,x2,x3,...,xn}
由 a∈H 可知 a−1∈H
设集合 H′={a−1⋅x1,a−1⋅x2,a−1⋅x3,...,a−1⋅xn}
由封闭性可知 H′⊆H
又因为 H′=a−1H ,由1得 |H′|=|H|
所以 H′=H
所以 aH=aH′={x1,x2,x3,...,xn}
即 aH=H
先说 bH=aH⇒b∈aH
由性质2得 b∈bH ,所以 b∈aH
再说 b∈aH⇒bH=aH
显然b可以写成 a⋅x(x∈H) 的形式,
由性质3得 xH=H
所以 bH=a⋅xH=aH
设 c∈aH∩bH ,由性质4得 cH=aH=bH
实际上这句话阐述成
“对于G的子群H,H的任意两个左(右)陪集要么相等,要么无相交”
因为 e∈H ,所以枚举所有的 x∈G ,所有陪集的并一定能组成 G
H 是有限群 G 的的子群,则 |H|∣|G|
由性质5可知,H的陪集之间要么相等要么不相交,
由性质6可知,H所有陪集的并等于G
我们可以把H的不重合的陪集想象成若干条不相交的线段,覆盖在G上
这样G就被划分为了大小相等的若干段,
因此这个结论就十分显然了
设 G 是 [1,n] 上的一个置换群, Ek 是 [1,n] 在 G 的作用下包含 k 的等价类, Zk 是使 k 不动的置换类,有 |Ek|×|Zk|=|G|.
具体来说, k 是目标集 [1,n] 上的一个位置,包含 k 的等价类 Ek 就是 k 通过 G 中的置换能得到的所有的位置, Zk 就是置换 f∈G 的集合,要求 k 在经过置换 f 的作用后仍为 k
我们来拿百度百科上的正方形顶点二着色问题来举例子
置换有四种:不动,向左旋转90°,旋转180°,向右旋转90°,为了方便表示,我们把这四种置换分别表示为 f1,f2,f3,f4
(实际上,对于一般的正n边形顶点着色问题来说,置换应当有2n种,即旋转 360°n⋅k(k=0..n−1) 以及关于n条对称轴的翻折,但由于正方形顶点二着色比较特殊,翻折后的等价类可以通过不翻折的一次旋转直接得到,也就是说我们翻转置换的不动点数量和旋转置换的不动点数量是相同的,为了简化描述与解答,这里是4种了)
具体置换如下
不动:(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)(11)(12)(13)(14)(15)(16)
向左旋转90°:(1)(2 3 4 5)(6 7)(8 9 10 11)(12 13 14 15)(16)
旋转180°:(1)(2 4)(3 5)(6)(7)(8 10)(9 11)(12 14)(13 15)(16)
向右旋转90°:(1)(2 5 4 3)(6 7)(8 11 10 9)(12 15 14 13)(16)
1 的等价类 E1 就是 {1} , Z1={f1,f2,f3,f4}
2 的等价类 E2 就是 {2,3,4,5} , Z2={f1}
11 的等价类 E11 就是 {8,9,10,11} , Z11={f1}
我们称 Ek 为 k 的轨道, Zk 为 k 的稳定化子
简单来说,这个定理就是
“轨道大小*稳定化子数=变换个数”
其实如果把陪集搞明白的话,证明这个定理还是非常容易的
我们发现 Zk 实际上是一个子群,因为k的置换不变,始终是k,所以在 Zk 中存在单位元 e ,且每个置换都有逆元,而且满足封闭和结合律
|Ek| 实际上是 Zk 不重复陪集的个数,对于置换 f∈Ek ,由陪集的性质5可知 fZk 各不相交(因为 f(k) 的值各不相同)
所以定理得证
写了这么多终于提到重头戏了
设 G={f1,f2,…f|G|} 是目标集 [1,n] 上的置换群。每个置换都写成不相交循环的乘积。
c(fi) 是在置换 fi 的作用下不动点的个数,也就是长度为1的循环的个数。通过上述置换的变换操作后可以相等的元素属于同一个等价类。若 G 将 [1,n] 划分成 L 个等价类,则等价类个数 L 为:
L=1|G|∑i=1|G|c(fi)
我们先考虑一下这个等价类L的概念
实际上就是 [1,n] 在群G作用下不等价元素的个数
形象的说,我们可以把 [1,n] 看成n个点,而G中的置换相当于一些有向边,即n个点中每个点都会发出 |G| 条边,如果把这个图上的重边去掉,而L就是该图上的联通块数(实际上就是 [1,n] 上互不相交的循环个数),而每个联通块 bi 的大小实际上就是 Ek(k∈bi) ,所以每个点k对答案的贡献就是 1Ek
即
如果 [1,n] 中各元素完成置换并判断是否相等的复杂度是 O(p) ,那么使用burnside引理求等价类的复杂度是 O(|G|np)
再拿上面的正方形顶点二着色问题举例,
这里 n=16,|G|=4
c(不变)=16
c(左转90°)=2
c(旋转180°)=4
c(右转90°)=2
所以 L=6
设 G={a1,a2,…a|G|} 是目标集 [1,n] 上的置换群。每个置换都写成不相交循环的乘积。
m(fi) 是在置换 fi 的作用下循环节的个数,通过上述置换的变换操作后可以相等的元素属于同一个等价类。若 G 将 [1,n] 用 k 种颜色分别进行染色,然后划分成 L 个等价类,则染色后的等价类个数 L 为:
L=1|G|∑i=1|G|km(fi)
注意:burnside引理中的群是针对染色方案,而Polya定理则是针对染色对象。
举例来说,正方形顶点二着色问题我们在burnside引理中讨论的目标集是染色后的格点图,共16种方案,而在Polya定理中的目标集则是我们需要染色的格点,共4个格点,编号为1,2,3,4
这样来看的话,G中的置换就是
不变:(1)(2)(3)(4)
左旋90°:(1 2 3 4)
右旋90°:(1 4 3 2)
旋转180°:(3 1)(4 2)
沿着红线对折:(1 4)(2 3)
沿着橙线对折:(1 2)(3 4)
沿着绿线对折:(1)(3)(2 4)
沿着蓝线对折:(2)(4)(1 3)
循环节数 m(f) 分别为4,1,1,2,2,2,3,3
(其实这里也可以和上面一样,不使用对折的置换,但为了解释的更清楚,所以这里提一下)
(容易发现,它们的置换方式都是一样的)
答案也是6
证明:
我们称原先的群G为 G′ ,原先的f为 f′
考虑如何用f计算出 c(f′) ,我们发现用循环乘积来表示的f中,每一个循环中的元素一定是同一个颜色,这样才能保证每次置换前后是同一等价类,所以实际上用k种颜色来染色的方案数就是 c(f′)=km(f)
又因为 |G|=|G′|
所以定理得证
这样的话就不用再枚举所有的染色方案了,时间复杂度为 O(|G|p)
《组合数学》中使用生成函数来证明该定理,蒟蒻并不会生成函数,所以这里先留一个坑(以后可能会填)= =
当染色次数有限制时,我们就不能直接套Polya定理了,但可以套用一些思路,对于求解过程中的一个置换来说,想让置换后染色方案不变,就可以让属于同一循环的染色对象颜色相同,这个时候一般用到多重集合排列或DP
百度百科,《组合数学》(第五版),《算法艺术与信息学奥赛》(刘汝佳 黄亮),《群论学习笔记》(TA爷)及网上其他的一些博客和资料
感谢TA爷的帮助!