置换群、Burnside引理与等价类计数问题

标签: 置换群 Burnside引理


置换

说说我对置换的理解,其实就是把一个排列变成另外一个排列。简单来说就是一一映射。而置换群就是置换的集合。

比如\[ \left(\begin{array}1
1 & 2 & 3 & 4 & 5 \\
5 & 3 & 4 & 2 & 1
\end{array}\right) \]是一个置换。也可以把置换看做定义域和值域都为{1,2,......,n}的函数,我们通常把置换写成形如{\(a_1,a_2,a_3,......,a_n\)}的形式,代表置换\[ \left(\begin{array}1 1 & 2 & 3 & ...... & n \\ a_1 & a_2 & a_3 & ...... & a_n\end{array}\right)\]

置换之间可以进行乘法。如置换f={3,1,4,2},g={2,3,4,1},那么fg={4,2,1,3}。而且置换乘法满足结合律,不过置换乘法并不满足交换律。如上面的例子,gf={1,4,2,3}。

为了方便我们处理置换,我们还经常把置换表示成循环的乘积。循环是什么呢?\(\left(\begin{array}1 1 & 2 & 3\end{array}\right)\)相当于置换\(\left(\begin{array}1 1 & 2 & 3\\2 & 3 & 1\end{array}\right)\)。一个循环就像一个环,其中每一个元素向下一个元素连边。由于每个点的出度与入度都为1,任意置换都能被分解为若干个循环。我们称一个置换中循环的个数为循环节,对于不相交的循环相乘是满足交换律的。

等价类计数问题

在这种题目中,题目会定义一种等价关系。满足等价关系的两种元素被看成同一种元素。这样就可以把这些元素分为很多个等价类,等价类中的元素相互等价。通常题目会让你求出等价类的个数。怎么来解决这种类型的问题呢?接下来我们引入Burnside引理。

Burnside引理

设置换群G为等价关系集合,且对于任意\(f,g\in G,都有fg\in G\) 。
记C(f)为经置换f作用后不动点的个数。则等价类个数L满足\[L=\frac{ \sum_{f \in G} {C(f)} }{|G|}\]

证明:
设\(Z_k\)为使k为不动点的置换集合,\(E_k\)为元素k所在的等价类。
\[ \sum_{f \in G} C(f) = \sum_{i=1}^n Z_i \]
而\[ \sum_{i=1}^n Z_i =\sum_{i=1}^L |E_i||Z_i| \]
又\[\because |Ei||Zi|=|G|\]
\[\therefore \sum_{i=1}^L |E_i||Z_i|=L|G|\]

我的理解是:
每一个置换的不动点个数之和就是使每一个元素不动的置换个数之和,所以\[ \sum_{f \in G} C(f) = \sum_{i=1}^n Z_i \]
而同一个等价类中使一个元素不动的置换个数相等,所以\[ \sum_{i=1}^n Z_i =\sum_{i=1}^L |E_i||Z_i| \]

又由轨道-稳定集定理,即“轨道大小×稳定化子数=变换个数”,(具体证明可以参照 《组合数学》(第5版)P181 定理4-11),所以\[ \sum_{i=1}^L |E_i||Z_i|=L|G|\]

至于Polya定理的证明很容易用Burnside引理解决,这里不再赘述。

置换群、Burnside引理与等价类计数问题的更多相关文章

  1. 置换群 Burnside引理 Pólya定理(Polya)

    置换群 设\(N\)表示组合方案集合.如用两种颜色染四个格子,则\(N=\{\{0,0,0,0\},\{0,0,0,1\},\{0,0,1,0\},...,\{1,1,1,1\}\}\),\(|N|= ...

  2. [bzoj1004][HNOI2008][Cards] (置换群+Burnside引理+动态规划)

    Description 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很快就给出了答案.进一步,小春要求染出Sr张红 ...

  3. BZOJ 1004: [HNOI2008]Cards( 置换群 + burnside引理 + 背包dp + 乘法逆元 )

    题意保证了是一个置换群. 根据burnside引理, 答案为Σc(f) / (M+1). c(f)表示置换f的不动点数, 而题目限制了颜色的数量, 所以还得满足题目, 用背包dp来计算.dp(x,i, ...

  4. 等价类计数(Polya定理/Burnside引理)学习笔记

    参考:刘汝佳<算法竞赛入门经典训练指南> 感觉是非常远古的东西了,几乎从来没有看到过需要用这个的题,还是学一发以防翻车. 置换:排列的一一映射.置换乘法相当于函数复合.满足结合律,不满足交 ...

  5. Burnside引理与polay定理

    #Burnside引理与polay定理 引入概念 1.置换 简单来说就是最元素进行重排列 是所有元素的异议映射,即\([1,n]\)映射到\([1,n]\) \[ \begin{pmatrix} 1& ...

  6. jzoj5988. 【WC2019模拟2019.1.4】珂学计树题 (burnside引理)

    传送门 题面 liu_runda曾经是个喜欢切数数题的OIer,往往看到数数题他就开始刚数数题.于是liu_runda出了一个数树题.听说OI圈子珂学盛行,他就在题目名字里加了珂学二字.一开始liu_ ...

  7. 等价类计数问题(Polya定理和burnside引理)

    零.约定: (置换等名词会在前置知识中有解释) \(1.\)在本文中,题目要求的染色方案等统称为"元素". \(2.\)两个元素严格相等我们记做"\(=\)", ...

  8. 等价类计数:Burnside引理 & Polya定理

    提示: 本文并非严谨的数学分析,有很多地方是自己瞎口胡的,仅供参考.有错误请不吝指出 :p 1. 群 1.1 群的概念 群 \((S,\circ)\) 是一个元素集合 \(S\) 和一种二元运算 $ ...

  9. 置换群和Burnside引理,Polya定理

    定义简化版: 置换,就是一个1~n的排列,是一个1~n排列对1~n的映射 置换群,所有的置换的集合. 经常会遇到求本质不同的构造,如旋转不同构,翻转交换不同构等. 不动点:一个置换中,置换后和置换前没 ...

随机推荐

  1. 修真院java后端工程师学习课程--任务1(day one)

    这是我从学习资料-线下报名-北京报名截取的报名截图,从图中我们可以看出我们的报名对象应该有姓名,qq,修真类型,预计入学时间,毕业院校,线上学号,日报链接,立愿,辅导师兄等属性,其中线上学号是主码. ...

  2. CUDA共享内存的使用示例

    CUDA共享内存使用示例如下:参考教材<GPU高性能编程CUDA实战>.P54-P65 教材下载地址:http://download.csdn.net/download/yizhaoyan ...

  3. 利用光场进行深度图估计(Depth Estimation)算法之一——聚焦算法

    前面几篇博客主要说了光场相机,光场相机由于能够记录相机内部整个光场,可以实现重聚焦(模糊线索)和不同视角的变换(视差线索),同时也可以利用这个特性进行深度估计(Depth Estimation). 先 ...

  4. 闲聊cassandra

    原创,转载请注明出处 今天聊聊cassandra,里面用了不少分布式系统设计的经典算法比如consistent hashing, bloom filter, merkle tree, sstable, ...

  5. junit4X系列源码--总体介绍

    原文出处:http://www.cnblogs.com/caoyuanzhanlang/p/3530267.html.感谢作者的无私分享. Junit是一个可编写重复测试的简单框架,是基于Xunit架 ...

  6. web开发概述

    1 Web概述 Web,在英语中表示网页的额意思,它用于表示Internet主机上供外界访问的资源. 2 Web的分类 按照服务器上的资源分类: 静态资源:指的是web页面中供人们浏览的数据是始终不变 ...

  7. Part 3:视图和模板--Django从入门到精通系列教程

    该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...

  8. openvpn服务端与客户端网段互通

    http://www.softown.cn/post/140.html OpenVPN安装.配置教程 http://www.softown.cn/post/137.html openvpn的serve ...

  9. MTF 曲线图解读

    最近想入手佳能小小白(EF70-200 F4.0 USM),购买镜头的时候,在镜头厂商的产品页看到下面形状的曲线图: 这是什么意思呢?看着很复杂的样子啊?百度了一圈学习了一下,下面做个简单的分析. 这 ...

  10. 赋值号和printf

    1.赋值号会自动转换类型: int a= 2.1; printf(‘‘%d’’,a);         //输出结果是2 2.printf不会转换类型,而是直接将内存中表示的补码数拿出来,最明显的就是 ...