群论 polya burnside

5 篇文章 0 订阅
4 篇文章 0 订阅

http://www.elijahqi.win/archives/3388

群论

什么是群?
元素和建立在元素上的二元运算构成的代数系统
如何判定是否是一个群?
要求满足四条群公理
(S,+) ( S , + ) 为群满足如下公理

  • 封闭性 x,yS,x+yS ∀ x , y ∈ S , x + y ∈ S
  • 结合率 a,b,cS(a+b)+c=a+(b+c) ∀ a , b , c ∈ S ( a + b ) + c = a + ( b + c )
  • 单位元 eS,xS e+x=x+e=x ∃ e ∈ S , ∀ x ∈ S   e + x = x + e = x
  • 逆元 xS,yS,x+y=y+x=e ∀ x ∈ S , ∃ y ∈ S , x + y = y + x = e
    群中逆元分左右 但是左逆元=右逆元
    证明:
    aG,ax=e ∃ a ∈ G , a · x = e 规定这里a是x的左逆元
    bG ba=e ∃ b ∈ G   b ⋅ a = e
    xa=(ba)(xa)=b(ax)a=ba=e x ⋅ a = ( b ⋅ a ) ⋅ ( x ⋅ a ) = b ⋅ ( a ⋅ x ) ⋅ a = b ⋅ a = e
    a是x的右逆元

G中所含元素的个数称为群G的阶记为|G|
分有限无限群多种概念
群中元素的阶

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

消去律

逆元存在与消去律等价
逆元存在 消去率存在
xa=ya x ⋅ a = y ⋅ a 两边同时 a1 a − 1 即可
消去率存在 逆元存在
建立一个新的二元组 (S={xa|xS},) ( S ′ = { x · a | x ∈ S } , · )
根据封闭性 SS S ′ ⊆ S
因为消去率所以 |S|=|S| | S ′ | = | S |
即S’=S 因为 eS e ∈ S 所以 eS e ∈ S ′
又因为定义了新的运算 故 tS,ta=e ∃ t ∈ S , t ⋅ a = e

拉格朗日定理

有限群(S,+)有子群(S’,+)
有|S|是|S’|的倍数
证明:
设一个子群 GG G ′ ⊆ G
就有陪集 Ga={xa|xG}aG G a ′ = { x ⋅ a | x ∈ G ′ } a ∈ G
Gb={xb|xG}bG G b ′ = { x ⋅ b | x ∈ G ′ } b ∈ G
GaGb!= G a ′ ⋂ G b ′ ! = ∅
Ga=Gb G a ′ = G b ′
因为 GaGb!= G a ′ ⋂ G b ′ ! = ∅
x,yG ∃ x , y ∈ G ′
使得 xa=yb x ⋅ a = y ⋅ b
a=x1yb a = x − 1 ⋅ y ⋅ b
zGza=z(x1yb) ∀ z ∈ G ′ z ⋅ a = z ⋅ ( x − 1 ⋅ y ⋅ b )
za=(zx1y)b z ⋅ a = ( z ⋅ x − 1 ⋅ y ) ⋅ b
因为这时候a,b,x,y都是钦定好的 那么遍历z的时候都会有唯一的 (zx1y) ( z ⋅ x − 1 ⋅ y ) 与之对应 所以恰好遍历G’ 所以得证
于是我们可以知道两个陪集要么相等要么不相交
然而我所有 G G ′ 的并是 G G 所以 假设|G|=x
那么 |G| | G | 一定是x的倍数 所以得证

欧拉定理用拉格朗日定理的证明

设集合 S={a1,a2,a3,...,aφ(n)} S = { a 1 , a 2 , a 3 , . . . , a φ ( n ) }
其中 gcd(ai,n)=1 g c d ( a i , n ) = 1 则S与模乘法形成的 (S,×) ( S , × ) 是群 证明 简单想象即可
那么设 Si={1,ai,a2i,a3i..} S i = { 1 , a i , a i 2 , a i 3 . . }
那么可知 (Si,×) ( S i , × ) (S,×) ( S , × ) 的子群
因群中元素互相做运算仍然是群中的元素
a|Si|1 a | S i | ≡ 1 a|S|1 ,aφ(n)1 a | S | ≡ 1   , a φ ( n ) ≡ 1

轨道-稳定化子定理

考虑置换群G 其中每个元素是1~n的置换
G中使得元素x不变的置换构成一个子群
稳定 stab(x)={fG|f(x)=x} s t a b ( x ) = { f ∈ G | f ( x ) = x }
x通过G中变换到的位置叫做称为轨道
orbit(x)={f(x)G} o r b i t ( x ) = { f ( x ) ∈ G }
|orbit(x)| | o r b i t ( x ) | 实际是stab(x)的陪集数
因为考虑每个可以变换到的位置 使得 |stab(x)|++ | s t a b ( x ) | + +
造出的陪集是 |orbit(x)|个即orbit(x)是不重复的陪集的个数
根据拉格朗日定理 |orbit(x)|×|stab(x)|=|G| | o r b i t ( x ) | × | s t a b ( x ) | = | G |

置换 置换群

例如 (1234 2314) ( 1 2 3 4   2 3 1 4 )
是一个置换但不是群 置换仅仅和每列相对应字符有关与自身列顺序无关

(3241) ( 3 2 4 1 )

经过如下置换
(12233144) ( 1 2 3 4 2 3 1 4 )
成为
(4321) ( 4 3 2 1 )

置换群将置换作为元素且满足群的性质

Burnside引理

该引理用于计算集合M关于置换群G的轨道数
定义两个元素是否本质质相同设两个元素x,y
fG ∃ f ∈ G 使得 f(x)=y f ( x ) = y 那么x,y即是本质相同的
M的轨道数即 M中本质不同的元素个数
感觉本质不同的元素个数就是循环的个数
M中的轨道数可以记为 xM1|orbit(x)| ∑ x ∈ M 1 | o r b i t ( x ) |
因为可以考虑每个轨道中都有 |orbit(x)| | o r b i t ( x ) | 个元素 然而每个元素对答案的贡献都会是 1|orbit(x)| 1 | o r b i t ( x ) |
直接带入轨道-稳定化子定理
原式 =xM|stab(x)||G| = ∑ x ∈ M | s t a b ( x ) | | G |
=xM|stab(x)||G| = ∑ x ∈ M | s t a b ( x ) | | G |
那么我们计算的时候只需要得到 stab(x)xM s t a b ( x ) x ∈ M 的个数即可
总结起来 集合M关于置换群G的轨道数等于G中每个置换下不动点的个数的平均数
但是这个似乎自己只会搜索 复杂度不够优秀
需要对每个置换计算这个置换下不变的方案个数
于是有polya计数法

Polya

公式:对一个置换p设c(p) 表示p中循环节个数
G是定义在X上的置换群 即项链或棋盘如果用m种颜色来染色 那么本质不同的方案数
xGmc(x)|G| ∑ x ∈ G m c ( x ) | G |

大家都是抱着对算法与数据结构极大的兴趣才参加集训的,我们也希望大家学有所成,但是刚刚接触信息学领域的同学往往存在很多困惑,不知道从何入手学习,在这篇向导里,我希望能将自己不多的经验与大家分享,希望对各位有所帮助. 一、语言是最重要的基本功 无论侧重于什么方面,只要是通过计算机程序去最终实现的竞赛,语言都是大家要过的第一道关.亚洲赛区的比赛支持的语言包括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、概率论——竞赛是以黑箱来判卷的,这就是说你几乎不能动使用概率算法的念头,但这也并不是说概率就没有用。关于这一点,只有通过一定的练习才能体会。而且近年来概率题出现的次数越来越多了.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值