【群论】polya定理
对Polya定理的个人认识
我们先来看一道经典题目:
He's Circles(SGU 294)
有一个长度为N的环,上面写着“X”和“E”,问本质不同的环有多少个(不能旋转重复就称之为本质不同)
输入样例:4
输出样例:6
那么要怎么办呢?暴力显然暴不出来……
我们可以考虑使用置换群。
我们有两种算法:
①Burnside引理:
答案直接为1/|G|*(D(a1)+D(a2)+D(a3)+……+D(as))
其中D(ak)为在进行置换群置换操作ak下不变的元素的个数。
在N=4下一共有四个置换群:
(1 2 3 4 (1 2 3 4 (1 2 3 4 (1 2 3 4
1 2 3 4) 2 3 4 1) 3 4 1 2) 4 1 2 3)
那么显然在置换a1下都不变,那么D(a1)=16 (4*4)
EEEE和XXXX在置换a2下都不变,所以D(a2)=2
XXXX和EEEE还有XEXE以及EXEX在置换a3下都不变,所以D(a3)=4
XXXX和EEEE在置换a4的情况下都不变,D(a4)=2
最后根据公式计算出1/|4|*(16+2+4+2)=6(种)
②Polya定理
回顾上面的Burnside算法,是否感觉D不太好实现呢?
那么我们就可以用一种更容易理解、适应力强、时间复杂度低、编程复杂度低的方法就是群论的最厉害的Polya定理
其实Polya定理与Burnside引理本质上的区别并不是很大,只不过入手问题的角度不一样。
我们可以发现,一个循环节之间的“不变元素”可以互相交换从而不影响整体,所以我们可以设Ci为置换群i的循环节个数。
例如(1 2 3 4 5
3 5 1 4 2)
的循环节就为:1和3循环1->3->1……
2和5循环2->5->2……
4和它自身循环4->4->4……
那么循环节数就为3
再回来看现在这个题目,我们可以抽象地把Ci替换掉Di
那么Di=p^C(i) (p为总共的字母数)
相同循环节中的元素可以互相置换,所以Di=p^C(i)
polya公式为1/|G|(p^C(1)+p^C(2)+……+p^C(s))
以4为例,则1/|G|=1/4
C(1):循环节为(1)(2)(3)(4),所以C(1)=4
C(2):循环节为(4 3 2 1),所以C(2)=1
C(3):循环节为(1 3)(2 4),所以C(3)=2
C(4):循环节为(1 2 3 4),所以C(4)=1
那么答案就为1/4(2^4+2^1+2^2+2^1)=6
这里的C相对于上面的D来说要简单,记得XJR学长给我讲过环的判定,直接任选一个没有选过的点,从这个点开始映射,走过的点标上1,等到再走到标上1时,结束,统计数加1
void search(int M){
int i=M;//一开始从这里开始
while(!flag[b[i]]){//如果它的映射没被访问过,那么说明它还没有构成环
i=b[i];//继续映射
flag[i]=1;//标记已访问
}
return ;//返回
}
int C(){
int tmp=0;
for(int i=1;i<=N;i++) if(!flag[i]) flag[i]=1,search(i),tmp++;//环数加1
return tmp;//返回循环节数
}
那么我们再加上一个快速幂,就可以进一步优化。
【群论】polya定理的更多相关文章
- UVA10294 Arif in Dhaka (群论,Polya定理)
UVA10294 Arif in Dhaka (群论,Polya定理) 题意 : 给你一个长为\(n\)的项链和手镯,每个珠子有\(m\)种颜色. 两个手镯定义为相同,即它们通过翻转和旋转得到一样的手 ...
- [bzoj1488][HNOI2009]图的同构——Polya定理
题目大意 求两两互不同构的含n个点的简单图有多少种. 简单图是关联一对顶点的无向边不多于一条的不含自环的图. a图与b图被认为是同构的是指a图的顶点经过一定的重新标号以后,a图的顶点集和边集能完全与b ...
- 【BZOJ1488】[HNOI2009]图的同构(Burside引理,Polya定理)
[BZOJ1488][HNOI2009]图的同构(Burside引理,Polya定理) 题面 BZOJ 洛谷 题解 求本质不同的方案数,很明显就是群论这套理论了. 置换一共有\(n!\)个,考虑如何对 ...
- 群论&Polya计数
群论&Polya计数 其实在我听课的过程中,我发现针对于学习OI中的群并没有什么过多必要向内学习... 群 以后会补的. 就是\(QQ\)群. 置换 置换就是一个... \[ \begin{m ...
- 等价类计数:Burnside引理 & Polya定理
提示: 本文并非严谨的数学分析,有很多地方是自己瞎口胡的,仅供参考.有错误请不吝指出 :p 1. 群 1.1 群的概念 群 \((S,\circ)\) 是一个元素集合 \(S\) 和一种二元运算 $ ...
- 【转】Polya定理
转自:http://endlesscount.blog.163.com/blog/static/82119787201221324524202/ Polya定理 首先记Sn为有前n个正整数组成的集合, ...
- [wikioi2926][AHOI2002]黑白瓷砖(Polya定理)
小可可在课余的时候受美术老师的委派从事一项漆绘瓷砖的任务.首先把n(n+1)/2块正六边形瓷砖拼成三角形的形状,右图给出了n=3时拼成的“瓷砖三角形”.然后把每一块瓷砖漆成纯白色或者纯黑色,而且每块瓷 ...
- HDU 3923 Invoker(polya定理+逆元)
Invoker Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 122768/62768 K (Java/Others)Total Su ...
- Polya定理
http://www.cnblogs.com/wenruo/p/5304698.html 先看 Polya定理,Burnside引理回忆一下基础知识.总结的很棒. 一个置换就是集合到自身的一个双射,置 ...
随机推荐
- 8个主要的Velocity语法使用说明
8个主要的Velocity语法使用说明,分别是:Velocity表达式,Velocity注释,Velocity循环,Velocity条件判断,Velocity赋值,Velocity调试,Velocit ...
- nodejs之async异步编程
1.什么是异步编程? 异步编程是指由于异步I/O等因素,无法同步获得执行结果时, 在回调函数中进行下一步操作的代码编写风格,常见的如setTimeout函数.ajax请求等等. 示例: for (v ...
- Android自定义键盘
布局文件 <?xml version="1.0" encoding="UTF-8"?> <Keyboard android:keyWidth= ...
- CentOS安装开发组相关的包
yum groupinstall "Development Tools" yum groupremove "Development Tools"
- Server Error in '/' Application
在服务器部署了网站,然后访问的时候出现异常 Server Error in '/' Application,一般这样的异常都是不明确的,我们应当把网站根目录web.config<custom ...
- Javascript 中的一些关于时间的操作【转】
1.时间对象和一些简单操作函数 var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); ...
- 安装时遇到:正在尝试其它镜像。 http://mirrors.btte.net/centos/7.2.1511/extras/x86_64/repodata/repomd.xml: [Errno 14] curl#6 - "Could not resolve host: mirrors.btte.net; 未知的错误"
我出现这种错误是因为网络链接问题,因为我设置虚拟机网络链接为VmNET8,设置了nat模式,使得我本地机可以访问虚拟机的linux服务器.但是打开虚拟机的浏览器却不能上网了.所以现在我用xshell装 ...
- ajax异步验证用户名密码,提示路径错误
使用thinkphp框架异步验证用户名和密码的时候,ajax路径错误可能有多重情况.我遇到的是,我自感路径没问题,且先前使用无错.由于多人合作使用svn,所以在更新代码后,使用firebug显示一直是 ...
- [转]linux援救模式:linux rescue使用详细图解
网上很多网友问怎么进rescue 模式,不知道怎么用rescue来挽救系统. 现在我来图解进入rescue (示例系统为RHEL 3) 1.用安装光盘或者硬盘安装的方式进入安装界面,在shell 中 ...
- hibernate 中如何用注解映射定长字符类型char(2)
如果是用xml的方式配置映射,可以在<column>标签的sql-type属性中设置char(2),比如: <property name="age" type=& ...