学习burnside、polya小结

本文介绍了群论的基本概念,包括群的定义、置换与置换群,并详细讲解了Burnside引理和Polya定理在计算组合数中的等价类问题的应用。通过实例解析,展示了如何使用这些理论解决具体的竞赛题目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

我好蔡啊
之前597问我群论是什么,我一脸懵逼。
心中暗自安慰自己——这玩意对现在的我用处不大。
没想到第二天比赛就出了这么一道题。
由于临近中考,中考压力过大,没有细学。
硬着头皮,好歹也算是学会了。

简介

群论是法国数学家伽罗瓦(Galois)的发明。伽罗瓦是一个极具传奇性的人物,年仅21岁就英年早逝于一场近乎自杀的决斗中。他用该理论,具体来说是伽罗瓦群,解决了五次方程问题。在此之前柯西(Augustin-Louis Cauchy),阿贝尔(Niels Henrik Abel)等人也对群论作出了贡献。
——来自百度百科

管他什么自杀的决斗呢,如果想知道为什么,去看看历史说不定知道。
这不是重点。

群论有很多很多的分支,但其中信息学主要利用的是其中的burnside与polya。

群的定义

首先,这个不重要。(其实是我懒得打一些奇奇怪怪的符号)
贴一下百度百科的,了解一下即可
在这里插入图片描述

置换

首先,置换这个玩意儿有点难以理解。
在这里插入图片描述
上面一排表示1被1到n中某个数 a 1 a_1 a1取代,2被1到n中某个数 a 2 a_2 a2代替,……,一直到n。
并且 a 1 , a 2 , a 3 , … … , a n a_1,a_2,a_3,……,a_n a1,a2,a3,,an互不相同。

置换群

其实这个就是一个置换的连接。
它也满足群的4个条件:
在这里插入图片描述
百度百科写的真好。

Burnside引理

Burnside引理是一个结论,用来计算组合数中的等价类计算。是用于Polya的
D ( a j ) D(a_j) D(aj)表示在置换 a j a_j aj下不变的元素的个数,也可称作不定点。
用L表示本质不同的方案数。

结论就是:
L = 1 ∣ G ∣ ∑ j = 1 s D ( a j ) L=\frac{1}{|G|}\sum_{j=1}^sD(a_j) L=G1j=1sD(aj)
证明看这里 https://baike.baidu.com/item/burnside引理/1505996?fr=aladdin

我们用一道题目来理解这个玩意:
SGU294 He’s Circles
大意就是给你一个有n颗珠子的项链,上面写着“X”和“E”,问本质不同的环有多少种。
(本质不同的环指循环重构后相同,例如XEX与XXE是同一种情况)

从这个题下手,当N=4时,一共有4种置换:(用s表示)
在这里插入图片描述
我们发现,所有的方案在置换 a 1 a_1 a1下都不变,则 D ( a 1 ) = 16 D(a_1)=16 D(a1)=16
XXXX、EEEE在置换 a 2 a_2 a2下不变,则 D ( a 2 ) = 2 D(a_2)=2 D(a2)=2
XXXX、EEEE、XEXE、EXEX在置换 a 3 a_3 a3下不变,则 D ( a 3 ) = 4 D(a_3)=4 D(a3)=4
XXXX、EEEE在置换 a 4 a_4 a4下不变,则 D ( a 4 ) = 2 D(a_4)=2 D(a4)=2
根据引理计算,可以得到: L = 6 L=6 L=6

这个玩意儿很好用,可是其中的D很不好求,怎么办呢?

Polya定理

如果我们利用爆搜来搞其中的D,可以发现时间复杂度及其的BIG。
接下来就要运用到polya定理了。

首先,我们要明白循环节是什么东东。
( a 1 a 2 … … a n ) = ( a 2 a 3 … … a 1 a 1 a 2 … … a n ) (a1a2……an)=(^{a1a2……an}_{a2a3……a1}) a1a2an=(a2a3a1a1a2an)
举个例子:
在这里插入图片描述
我们发现,其中(132)就是前面3个数字旋转。(45)这是后面2个数字旋转。
由此可知,每个置换都可以写成若干个互不相交的循环。
如上面(132)与(45)就互不相交。
那么,循环节则表示一个置换中的循环个数。上述的循环节个数为2.

实在无法理解可以看看这个:
https://wenku.baidu.com/view/8ae2981033d4b14e84246829.html

正题:
Polya定理:设G为一个置换群,如上面一题,用m种颜料涂染n个珠子,则方案为:
L = 1 ∣ G ∣ ( m c ( g 1 ) + m c ( g 2 ) + … … + m c ( g s ) ) L=\frac1{|G|}(m^{c(g_1)}+m^{c(g_2)}+……+m^{c(g_s)}) L=G1(mc(g1)+mc(g2)++mc(gs))
其中: c ( g i ) c(g_i) c(gi)表示 g i g_i gi置换的循环节数, G = ( g 1 , g 2 , … … , g s ) G=(g_1,g_2,……,g_s) G=(g1,g2,,gs)

继续举个例子:
同上题:
g 1 g_1 g1为(2,3,4,1)则 g 1 = ( 4321 ) , c ( g 1 ) = 1 g_1=(4321),c(g_1)=1 g1=(4321),c(g1)=1
g 2 g_2 g2为(3,4,1,2)则 g 2 = ( 13 ) ( 24 ) , c ( g 2 ) = 2 g_2=(13)(24),c(g_2)=2 g2=(13)(24),c(g2)=2
g 3 g_3 g3为(4,1,2,3)则 g 3 = ( 1234 ) , c ( g 3 ) = 1 g_3=(1234),c(g_3)=1 g3=(1234),c(g3)=1
g 4 g_4 g4为(1,2,3,4)则 g 4 = ( 1 ) ( 2 ) ( 3 ) ( 4 ) , c ( g 4 ) = 4 g_4=(1)(2)(3)(4),c(g_4)=4 g4=(1)(2)(3)(4),c(g4)=4
因为 m = 2 m=2 m=2则算出来可得 L = 6 L=6 L=6

接下来分析时间复杂度:
通常情况下:
求出一个置换的循环节点数: O ( n ) O(n) O(n)
求出每个置换: O ( s ) O(s) O(s)
结合起来就是: O ( s n ) O(sn) O(sn)
非常优秀。

在上面的这道题,我们发现, c ( g i ) = n / g c d ( n , i ) c(g_i)=n/gcd(n,i) c(gi)=n/gcd(n,i)
感性理解理解。
所以就更加优秀了。

例题

jzoj4800. 【GDOI2017模拟9.24】周末晚会

参考资料

本人版权意识薄
https://blog.youkuaiyun.com/liangzhaoyang1/article/details/72639208
https://wenku.baidu.com/view/8ae2981033d4b14e84246829.html
https://blog.youkuaiyun.com/gmh77/article/details/90731621
百度百科

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值