漫谈OI中的群论入门

前言

本文以群论的一些基本概念及定理证明为主,且多为信息学竞赛所应用,如有不当之处,还望指正
本文对burnside引理与Polya定理仅作引入与证明,达到初步理解的目的,不作深入讨论,具体题目和实现方法会在以后的博文中有所提及

定义

如果从公式化地来说,群G是一个定义在二元组 (S,) 的代数结构
S 是一个集合,是一个二元运算符,并不是指乘号,比如平常我们在数集上所使用的 +  × ÷ ,集合运算中使用的   都是二元运算
满足下列条件的二元组 G=(S,) 可以称为群

1.封闭性

x,yS,xyS
通俗来讲,就是集合 S 中任取两个元素,它们运算后的结果也是 S 中的元素
比如S是二维向量集, 是点积,显然这个二元组不是群,因为运算得到的元素不属于S

2.结合律

x,y,zS,(xy)z=x(yz)
这个比较简单,不说了

3.单位元

eS,xS,ex=xe=x
例如
S=Z,=+ 时, e=0
S=R,=× 时, e=1
S=N+,= 时,没有单位元
如果 G 是加法群时,G中的单位元换叫做“零元”,记为 0

4.逆元

xS,yS,xy=yx=e
在这种情况下我们可以把 y 写成x1
例如
S=Z,=+ 时, x1=x
S=R,=× 时, x1=1x ,所以这个二元组不是群,因为0不是逆元

显然 (S=N,=+) , (S=Z,=×) 不是群,因为它们中并不是所有的元素都有逆元
在群中,每个元素都是有逆元的
其实还有左右逆元之分,但是在群中,左逆元 = 右逆元
证明:
xG, aG,ax=e ,即 a x的左逆元
显然
bG,ba=e
那么
xa=(ba)(xa)=b(ax)a=ba=e
a 也是x的右逆元

如果 G 是加法群时,a的逆元改叫做“负元”,并记为a

相关概念

G 中所含元素的个数,称为群G的阶,记为 |G| ,即S中所含元素的个数
因此 G 可以根据|G|是否为 + ,分为有限群和无限群
实际上 G 中的元素也有阶的定义,此处作为了解

在群G中, aG 。如果有整数k,使 ak=e ,那么使这个等式成立的最小正整数k叫做a的阶,记为 k=|a|
( ak 表示连续k个a进行 G 中规定的运算,不是传统意义上的k个a相乘)
如果这样的k不存在,则称a的阶是无限的,记为a=+

消去律

其实早在小学我们就接触过一些
b=ca+b=a+c
b=ca×b=a×c  (a0)
对于群中的消去律来说,它的定义是 x=y xa=ya 互为充分必要条件
注意这里的 x,y,a 都是指的是群中的任意元素
当S是有限集,在具有封闭性,结合律和单位元的二元组(S,·)里,逆元存在 消去律存在
证明:
先说简单的,逆元存在 消去律存在
只要在 xa=ya 两边同时乘以 a1 就可以了
消去律存在 逆元存在
对于 aS ,建立一个新二元组 (S={xa|xS},)
根据封闭性, SS ,
而且由于不会存在类似 xa=ya 这样的重复元素情况(因为消去律的存在保证这种情况下 x=y ,违背集合元素的不重复性),所以 |S|=|S|
所以 S=S
又因为 eS ,所以 eS
所以 tS,ta=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 时显然成立
n2 时,我们可以想象成在原来的n-1阶不相交循环里新加入了一个点n,设 iai 变成了 in ,这样 [1,n] 的排列a就缺少了 ai ,所以 nai ,显然这样操作之后仍然满足“互不相交的循环”

定义“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的子群,对于 aG {ah|hH} 表示H的一个左陪集,记作 aH ;
{ha|hH} 表示H的一个右陪集,记作 Ha .
陪集有一些性质(由于左右陪集证明方法同理,因此下面证明仅讨论左陪集的情况):
注:下面的 a,bG

1.H中任意陪集的大小(即元素个数)相等,都等于 |H|

这个证明比较简单,因为结合律的存在,使得 ah(hH) 不会有重复.

2. aaH ,且 aHa

因为 H 是一个群,所以eH,所以 a=aeaH
aHa 同理

3. aHaH=H

先说 aH=HaH :
由性质2得 aaH ,所以 aH
再说 aHaH=H :
设H中的集合为 {x1,x2,x3,...,xn}
aH 可知 a1H
设集合 H={a1x1,a1x2,a1x3,...,a1xn}
由封闭性可知 HH
又因为 H=a1H ,由1得 |H|=|H|
所以 H=H
所以 aH=aH={x1,x2,x3,...,xn}
aH=H

4. baHbH=aH

先说 bH=aHbaH
由性质2得 bbH ,所以 baH
再说 baHbH=aH
显然b可以写成 ax(xH) 的形式,
由性质3得 xH=H
所以 bH=axH=aH

5. aHbHaH=bH

caHbH ,由性质4得 cH=aH=bH
实际上这句话阐述成
“对于G的子群H,H的任意两个左(右)陪集要么相等,要么无相交”

6. xGHx=G

因为 eH ,所以枚举所有的 xG ,所有陪集的并一定能组成 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 就是置换 fG 的集合,要求 k 在经过置换f的作用后仍为 k
我们来拿百度百科上的正方形顶点二着色问题来举例子
这里写图片描述
置换有四种:不动,向左旋转90°,旋转180°,向右旋转90°,为了方便表示,我们把这四种置换分别表示为f1,f2,f3,f4
(实际上,对于一般的正n边形顶点着色问题来说,置换应当有2n种,即旋转 360°nk(k=0..n1) 以及关于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 不重复陪集的个数,对于置换 fEk ,由陪集的性质5可知 fZk 各不相交(因为 f(k) 的值各不相同)
所以定理得证

Burnside引理

写了这么多终于提到重头戏了

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(kbi) ,所以每个点k对答案的贡献就是 1Ek

L=k=1n1Ek

由轨道-稳定集定理得
L=k=1nZk|G|=1|G|k=1nZk

由定义易得
k=1n|Zk|=i=1|G|c(fi)

该引理得证

如果 [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

Polya定理

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爷的帮助!

大家都是抱着对算法与数据结构极大的兴趣才参加集训的,我们也希望大家学有所成,但是刚刚接触信息学领域的同学往往存在很多困惑,不知道从何入手学习,在这篇向导里,我希望能将自己不多的经验与大家分享,希望对各位有所帮助. 一、语言是最重要的基本功 无论侧重于什么方面,只要是通过计算机程序去最终实现的竞赛,语言都是大家要过的第一道关.亚洲赛区的比赛支持的语言包括C/C++与JAVA.虽然JAVA在应用极为广泛,但是其运行速度不可恭维.而且在以往的比赛来看,大多数队伍还是采用了C或者C++.而且C语言是大家接触的第一门编程语言,所以我们集训队都采用C和C++混编的方式写代码. 新来的同学可能C的基础知识刚刚学完,还没有接触过C++,其实在赛场上使用纯C的选手还是大有人在的,它们主要是看重了纯C在效率上的优势,所以这部分同学如果时间有限,并不需要急着去学习新的语言,只要提高了自己在算法设计上的造诣,纯C一样能发挥巨大的威力.但是我还是希望大家都能够学点C++. C++相对于C,在输入输出流上的封装大大方便了我们的操作,同时降低了出错的可能性,并且能够很好地实现标准流与文件流的切换,方便了调试的工作。如果有些同学比较在意这点,可以尝试C和C++的混编,毕竟仅仅学习C++的流操作还是不花什么时间的。 C++的另一个支持来源于标准模版库(STL),库提供的对于基本数据结构的统一接口操作和基本算法的实现可以缩减我们编写代码的长度,这可以节省一些时间。但是,与此相对的,使用STL要在效率上做出一些牺牲,对于输入规模很大的题目,有时候必须放弃STL,这意味着我们不能存在“有了STL就可以不去管基本算法的实现”的想法;另外,熟练和恰当地使用STL必须经过一定时间的积累,准确地了解各种操作的时间复杂度,切忌对STL不熟悉的部分滥用,因为这其蕴涵着许多初学者不易发现的陷阱。像STL的很多容器, vector,queue,stack,map,set等一定要比较熟悉,STL的sort是必需要掌握的.掌握这些STL知识后写代码的时候相对于纯C会节省不少时间. C语言学习推荐:C程序设计(谭浩强编著) C++学习推荐: C++Prime, C++大学教程.(其实基本上的C++教程都行的…) STL学习推荐: C++Prime,STL标准库.(理论联系实际,边学就用学的最快) 二、以数学为主的基础知识十分重要 虽然被定性为程序设计竞赛,但是参赛选手所遇到的问题更多的是没有解决问题的思路,而不是有了思路却死活不能实现,这就是平时积累的基础知识不够。竞赛对于基础学科的涉及主要集数学,此外对于物理、电路等等也可能有一定应用,但是不多。因此,大一的同学也不必为自己还没学数据结构而感到不知从何入手提高,把数学捡起来吧!下面来谈谈在竞赛应用的数学的主要分支。 1、离散数学——作为计算机学科的基础,离散数学竞赛涉及最多的数学分支,其重之重又在于图论和组合数学,尤其是图论。 图论之所以运用最多是因为它的变化最多,而且可以轻易地结合基本数据结构和许多算法的基本思想,较多用到的知识包括连通性判断、DFS和BFS,关节点和关键路径、欧拉回路、最小生成树、最短路径、二部图匹配和网络流等等。虽然这部分的比重很大,但是往往也是竞赛的难题所在,如果有初学者对于这部分的某些具体内容暂时感到力不从心,也不必着急,可以慢慢积累。 竞赛设计的组合计数问题大都需要用组合数学来解决,组合数学的知识相比于图论要简单一些,很多知识对于小学上过奥校的同学来说已经十分熟悉,但是也有一些部分需要先对代数结构群论有初步了解才能进行学习。组合数学竞赛很少以难题的形式出现,但是如果积累不够,任何一道这方面的题目却都有可能成为难题。 2、数论——以素数判断和同余为模型构造出来的题目往往需要较多的数论知识来解决,这部分在竞赛的比重并不大,但只要来上一道,也足以使知识不足的人冥思苦想上一阵时间。素数判断和同余最常见的是在以密码学为背景的题目出现,在运用密码学常识确定大概的过程之后,核心算法往往要涉及数论的内容。 3、计算几何——计算几何相比于其它部分来说是比较独立的,就是说它和其它的知识点很少有过多的结合,较常用到的部分包括——线段相交的判断、多边形面积的计算、内点外点的判断、凸包等等。计算几何的题目难度不会很大,但也永远不会成为最弱的题。 4、线性代数——对线性代数的应用都是围绕矩阵展开的,一些表面上是模拟的题目往往可以借助于矩阵来找到更好的算法。 5、概率论——竞赛是以黑箱来判卷的,这就是说你几乎不能动使用概率算法的念头,但这也并不是说概率就没有用。关于这一点,只有通过一定的练习才能体会。而且近年来概率题出现的次数越来越多了.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值