数学:Burnside引理与Pólya定理
这个计数定理在考虑对称的计数中非常有用
先给出这个定理的描述,虽然看不太懂:
在一个置换群G={a1,a2,a3……ak}中,把每个置换都写成不相交循环的乘积。 设C1(ak)是在置换ak的作用下不动点的个数,也就是长度为1的循环的个数。通过上述置换的变换操作后可以相等的元素属于同一个等价类那么等价类的个数就等于:
然后理解一下公式
一正方形分成4格,2着色,有多少种方案?其中,经过转动相同的图象算同一方案。
关于转动,一共有四种置换方法,也就是|G|=4
不动(360度):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)
然后我们针对每一种置换的方式,找到其中的不动点,也就是只有自己的情况
由Burnside引理,共有(16+2+2+4)/4=6(种方案)
然后的Pólya定理其实就是简化这个运算用的
利用Burnside引理要首先列出所有n^m种可能的染色方案,然后找出在每个置换下保持不变的方案数。
然后找出在每个置换下保持不变的方案数,显然当m或n很大的时候,复杂度会炸
Polya定理实际上是Burnside引理的具体化,提供了计算不动点的具体方法
假设一个置换有σk个循环,就是轮换 易知每个循环对应的所有位置颜色需一致,而任意两个循环之间选什么颜色互不影响。 因此,如果有m种可选颜色,则该置换对应的不动点个数为m^σk。 用其替换Burnside引理中的C(G),即C(G)=m^k。得到等价类数目为:
老实说,我看不懂这个怎么用的。。
burnside定理就是 非等价染色数 = 在G中单个置换下保持不变的染色数的平均数
而polya定理说的是一种特殊情况,若有m中颜色,每种颜色不限数量,则在G中的某个置换g下,保持不变的染色数=m^k,k为置换g的循环个数
典型例题POJ1286
我们需要求的也就是不同置换的个数,和每一个置换的循环节数
旋转,旋转i个小球的距离,那么会得到0~n-1的置换方案,共有n种,对于旋转i个小球的循环节数为gcd(n,i)
翻转,对于偶数,不经过小球有对称抽有n/2个,每种置换方案有n/2+1个循环节;经过小球的对称轴有n/2个,每种置换方案有n/2个循环节
对于奇数,经过小球的对称轴,有n个,每种方案有n/2+1个循环节
1 #include<cstdio> 2 long long n,ans; 3 long long gcd(long long a,long long b) 4 { 5 return b==0?a:gcd(b,a%b); 6 } 7 long long pow(long long x,long long k) 8 { 9 if(k==1) return x; 10 long long s=pow(x,k/2); 11 s=s*s; 12 if(k%2) s*=x; 13 return s; 14 } 15 int main() 16 { 17 while(scanf("%lld",&n)==1&&n!=-1) 18 { 19 if(n==0) 20 { 21 printf("0\n"); 22 continue; 23 } 24 ans=0; 25 for(int i=0;i<n;i++) 26 ans+=pow(3,gcd(n,i)); 27 if(n%2) 28 { 29 ans+=n*pow(3,n/2+1); 30 } 31 else 32 { 33 ans+=n/2*pow(3,n/2); 34 ans+=n/2*pow(3,n/2+1); 35 } 36 printf("%lld\n",ans/(n*2)); 37 } 38 return 0; 39 }
转载于:https://www.cnblogs.com/aininot260/p/9568413.html
数学:Burnside引理与Pólya定理相关推荐
- Burnside引理与Pólya定理
正文 hht主要讲了Burnside引理的不完全证明和用Burnside引理推出Pólya定理 下面主要围绕这两方面来讨论 Burnside引理的不完全证明 有一个前置结论hht没有证明,说是需要引入 ...
- 置换群和Burnside引理,Polya定理
定义简化版: 置换,就是一个1~n的排列,是一个1~n排列对1~n的映射 置换群,所有的置换的集合. 经常会遇到求本质不同的构造,如旋转不同构,翻转交换不同构等. 不动点:一个置换中,置换后和置换前没 ...
- 群论:Burnside引理与Polya定理
正题 在数学中,群表示一个拥有满足封闭性.满足结合律.有单位元.有逆元的二元运算的代数结构,包括阿贝尔群. 置换,简单来说就是对元素来进行一种重排列,即 [1,n][1,n][1,n] 映射到 [1, ...
- 置换群,Polya引理和burnside引理(等价类计数问题)
参考文章: 等价类计数问题 Burnside引理&Pólya定理 Burnside引理与Polya定理 置换群和Burnside引理,Polya定理 概念引入: 离散数学应该学过置换群的相关概 ...
- Burnside引理和Polya定理详解(适合零基础)
声明:本知识点为帮助大家更好地理解置换群论这一抽象的内容,一些定义中掺杂了撰写者自身的理解,和严格的数学定义有些出入,基本为数学定义的缩小解释和限制解释. 另外,统一一些符号的使用. 对集合A,|A| ...
- Burnside引理Pólya定理
Burnside's lemma 引例 题目描述 一个由2*2方格组成的正方形,每个格子上可以涂色或不涂色, 问共有多少种本质不同的涂色方案. (若两种方案可通过旋转互相得到,称作本质相同的方案) 解 ...
- ACM_置换群 burnside引理 Polya定理
置换群也是群论当中一个比较重要的内容,可是在离散课上老师直接跳过了这章内容我也是--(日了dog了),自己看了半天资料总算是有点眉目了. 1.置换群: 首先我们来介绍一下置换,设S为一个n个元素的集合 ...
- 组合数学常用内容——Polya定理+Burnside引理
Burnside引理 设G是N{1,2,.....,n}上的置换群,G在N上可引出不同的等价类(在置换群中有置换的都等价),其不同的等价类的个数为LL=1/|G|*(c1(a1)+...c1(ai). ...
- Polya定理,Burnside引理
涉及到组合数学的问题,首先是群的概念: 设G是一个集合,*是G上的二元运算,如果(G,*)满足下面的条件: 封闭性:对于任何a,b∈G,有a*b∈G; 结合律:对任何a,b,c∈G有(a*b)*c=a ...
最新文章
- 基于yolov5的行人检测跟踪与社交距离预测 (pedestrian detection and social distance prediction)
- 一台 Java 服务器可以跑多少个线程?
- [C语言]关于指针和int型的一道题目
- 位数不足前面补0mysql语句_全网热议:监控补光灯爆亮闪瞎眼!你遇到过吗?
- 这样写Java,同事直呼666
- micro_macro
- 阿里云 Code Pipeline 体验
- 引用了System.Configuration命名空间,却找不到ConfigurationManager类
- EmbossMaskFilter BlurMaskFilter 学习
- 全国计算机等级一级(选择题的)的练习,附加答案
- logstash安装 window版
- python读取千万级数据库数据类型_解决python读取几千万行的大表内存问题
- whm面板降mysql_WHMCS与Cpanel/WHM面板整合方法-Cpanel/WHM管理使用教程 | 麦田一棵葱...
- 电影记忆之16(人工智能)
- px4原生源码学习-(1)
- Nanopore牛津纳米孔测16S学习笔记
- Google Deepmind的自杀开关研究或缓解人工智能恐慌
- spring和jump区别_jump和leap之间的区别
- Java整点报时定时器
- ¥9.9拼5节scratch青少儿编程课程,还能领取少儿编程大礼包!快分享吧!
热门文章
- python真的那么火吗-前言、Python是真的火,还是炒得火?来看看它的前世和发展...
- python学到什么程度可以写爬虫-小白python学到什么程度可以学习网络爬虫? ?...
- python天天学怎么样-Python天天学_03_基础三
- python是什么编程教程-python教程看完了,还是不会编程?
- 怎么学python-如何轻松学习Python数据分析
- 20行python代码的入门级小游戏-python实现石头剪刀布小游戏
- python turtle画气球-python windows下显示托盘区气球消息
- python 画图 内存-python的内存分析和处理
- python代码示例下载-使用python3批量下载rbsp数据的示例代码
- 用python开发的网站多吗-django可以开发大型网站吗