数学: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个循环节
#include<cstdio>
long long n,ans;
long long gcd(long long a,long long b)
{
return b==?a:gcd(b,a%b);
}
long long pow(long long x,long long k)
{
if(k==) return x;
long long s=pow(x,k/);
s=s*s;
if(k%) s*=x;
return s;
}
int main()
{
while(scanf("%lld",&n)==&&n!=-)
{
if(n==)
{
printf("0\n");
continue;
}
ans=;
for(int i=;i<n;i++)
ans+=pow(,gcd(n,i));
if(n%)
{
ans+=n*pow(,n/+);
}
else
{
ans+=n/*pow(,n/);
ans+=n/*pow(,n/+);
}
printf("%lld\n",ans/(n*));
}
return ;
}
数学:Burnside引理与Pólya定理的更多相关文章
- @总结 - 12@ burnside引理与pólya定理
目录 @0 - 参考资料@ @1 - 问题引入@ @2 - burnside引理@ @3 - pólya定理@ @4 - pólya定理的生成函数形式@ @0 - 参考资料@ 博客1 @1 - 问题引 ...
- Burnside 引理与 Pólya 定理
群 群的定义 在数学中,群是由一种集合以及一个二元运算所组成的,符合"群公理"的代数结构. 一个群是一个集合 \(G\) 加上对 \(G\) 的二元运算.二元运算用 \(\cdot ...
- 置换群和Burnside引理,Polya定理
定义简化版: 置换,就是一个1~n的排列,是一个1~n排列对1~n的映射 置换群,所有的置换的集合. 经常会遇到求本质不同的构造,如旋转不同构,翻转交换不同构等. 不动点:一个置换中,置换后和置换前没 ...
- Burnside引理与polay定理
#Burnside引理与polay定理 引入概念 1.置换 简单来说就是最元素进行重排列 是所有元素的异议映射,即\([1,n]\)映射到\([1,n]\) \[ \begin{pmatrix} 1& ...
- Burnside引理与Polya定理
感觉这两个东西好鬼畜= = ,考场上出了肯定不会qwq.不过还是学一下吧用来装逼也是极好的 群的定义 与下文知识无关.. 给出一个集合$G = \{a, b, c, \dots \}$和集合上的二元运 ...
- Burnside引理与Polya定理 学习笔记
原文链接www.cnblogs.com/zhouzhendong/p/Burnside-Polya.html 问题模型 有一个长度为 $n$ 的序列,序列中的每一个元素有 $m$ 种取值. 如果两个序 ...
- 【POJ2888】Magic Bracelet Burnside引理+欧拉函数+矩阵乘法
[POJ2888]Magic Bracelet 题意:一个长度为n的项链,有m种颜色的珠子,有k个限制(a,b)表示颜色为a的珠子和颜色为b的珠子不能相邻,求用m种珠子能串成的项链有多少种.如果一个项 ...
- 【BZOJ1004】[HNOI2008]Cards Burnside引理
[BZOJ1004][HNOI2008]Cards 题意:把$n$张牌染成$a,b,c$,3种颜色.其中颜色为$a,b,c$的牌的数量分别为$sa,sb,sc$.并且给出$m$个置换,保证这$m$个置 ...
- 【uva 10294】 Arif in Dhaka (First Love Part 2) (置换,burnside引理|polya定理)
题目来源:UVa 10294 Arif in Dhaka (First Love Part 2) 题意:n颗珠子t种颜色 求有多少种项链和手镯 项链不可以翻转 手镯可以翻转 [分析] 要开始学置换了. ...
随机推荐
- 第八章 IO库
8.1&&8.2 #include <iostream> #include <vector> #include <string> using nam ...
- 初涉算法——STL初步
一.头文件<algorithm> ①sort函数 sort使用数组元素默认的大小比较运算符进行排序,只有在需要按照特殊依据进行排序时才需要传入额外的比较函数: sort可以给任意对象排序( ...
- 20145214 《Java程序设计》第2周学习总结
20145214 <Java程序设计>第2周学习总结 教材学习内容总结 基本类型 整数:可分为short整数.int整数.long整数. 字节:即byte类型,可表示-128~127的整数 ...
- hustoj题目标准xml格式
具体格式可见google code. 分析了一下发现像<time_limit></time_limit><memory_limit></memory_limi ...
- iOS开发allocWithZone介绍
首先我们知道,我们需要保证单例类只有一个唯一的实例,而平时我们在初始化一个对象的时候, [[Class alloc] init],其实是做了两件事. alloc 给对象分配内存空间,init是对对象的 ...
- 阻塞 , 非阻塞 , 同步 ,异步 , I/O模型
•阻塞,非阻塞:进程/线程要访问的数据是否就绪,进程/线程是否需要等待: •同步,异步:访问数据的方式,同步需要主动读写数据,在读写数据的过程中还是会阻塞:异步只需要I/O操作完成的通知,并不主动读写 ...
- [计算机网络] C++模拟telnet登陆SMTP服务发送邮件过程
在百度文库中的<使用telnet协议收发邮件>,我们可以很清楚地看到如何通过telnet来进行发送邮件,下面是一些需要用到的命令,通过以下命令可以很容易实现邮件发送功能.为了更好地理解其中 ...
- Luogu1731 NOI1999生日蛋糕(搜索)
非常经典的剪枝题然而一直没有写.感觉自己连普及组水平都没有了. 1.半径和高枚举范围满足加上后总体积不超过n且剩下每层还能放. 2.半径从大到小枚举,因为体积正比于半径平方而面积正比于半径,大的半径更 ...
- Python:树的遍历
各种遍历顺序如下图所示: 树的最大深度 # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = ...
- 转:浅谈深度学习(Deep Learning)的基本思想和方法
浅谈深度学习(Deep Learning)的基本思想和方法 参考:http://blog.csdn.net/xianlingmao/article/details/8478562 深度学习(Deep ...