摘要: Polya 定理、立方体旋转、欧拉定理、母函数型 Polya、图的计数
【对算法,数学,计算机感兴趣的同学,欢迎关注我哈,阅读更多原创文章】
我的网站:潮汐朝夕的生活实验室
我的公众号:算法题刷刷
我的知乎:潮汐朝夕
我的github:FennelDumplings
我的leetcode:FennelDumplings
在 组合数学1-排列组合 中我们详细梳理了组合数学的基本模型以及相关公式;在 组合数学2-母函数,递推关系 中我们详细学习了母函数、递推关系;在文章 组合数学3-特殊计数序列,指数型母函数 中我们详细学习了指数型母函数、特殊计数序列。
在文章 组合数学5-群论 中,我们学习了置换群及其应用。核心概念有共轭类、对换、等价类、Burnside 引理。
本文是组合数学第六部分,从 Burnside 的困境入手,逐渐深入 Polya 计数的理论。主要内容如下:
- Burnside引理回顾
- 等价类的最终结论: Burnside引理
- l=1|G|g∑j=1c1(aj)
- 例子: 正方形顶点二着色只考虑旋转的等价类个数
- Burnside的困境
- 正方形顶点红蓝二着色,只考虑旋转的转动群,有多少个不同图像
- 6种色给正方体着色,一面一色,没面不同,有多少中涂法
- 组合计数
- Bernside
- Burnside的问题
- 需要画出所有图像
- 颜色多了或者着色对象复杂,Burnside则只能停留在理论
- Polya定理
- Polya与Bunside的应用
- 原来: 是找出所有图像再找出这些图像的置换群
- 现在: 直接考虑结构(e.g. 将正方形顶点打标)
- 原来: 找图像群一阶循环个数
- 现在: 着色对象结构的置换群中循环个数
- Polya定理描述
- l=1|ˉG|g∑j=1mc(¯pj)
- Polya定理应用
- 等边三角形 3 顶点用 3 色着色的方案数
- 三种不同色的珠子,串成四个珠子的环形项链,求方案数
- Polya与Bunside的应用
- 立方体旋转
- 正六面体转动群
- 面置换: 6 个面
- 顶点置换: 8 个顶点
- 棱置换: 12条棱
- 正六面体每个面任意做一条对角线,求方案数
- 正六面体转动群
- 欧拉定理
- 如何思考空间中的凸多面体,如何记忆图像
- 欠角: 凸多面体与一个顶点相关的面角之和与 360 的差
- 凸多面体各定点的欠角和为 720
- 足球有多少个正五边形,多少个正六边形
- 用火柴搭一个足球有多少方案
- 八个骰子,叠成正六面体,求方案数
- 母函数型Polya
- Polya可以给出方案数,但不能给出具体方案
- 母函数型Polya的两个部分
- Polya: 计数
- 母函数: 对状态枚举
- 对三个相同的球用r,y,g,b四种颜色染色,求所有可能的颜色组合
- 三种色的珠子,用4珠子串成环形项链,求可能方案
- 等边三角形用 r,g,b 三种颜色着色,求可能方案
- 4个红珠子,放在正六面体4个顶点上,有多少方案
- 正四面体,点4着色,面3着色,棱2着色,求方案数
- 四个球 a,a,b,b 放入 3 个不容盒子,求方案数,如果不允许空盒,求方案数
- 法1: 容斥计数
- 法2: 母函数型 Polya
- 图的计数
- n个顶点的简单图有多少种(完全图的边二着色)
- 完全图的置换: 与立方体的区别是不再是刚体
- 4个顶点不同构的图
- 4个顶点不同构的有向图
- Polya 的书《数学的发现》
Burnside 引理回顾
等价类的最终结论即Burnside引理
Burnside引理
G={a1,a2,…,ag} 为目标集 [1,n] 上的置换群。每个置换都写成不相交循环的乘积。c1(ak) 是在置换 ak 的作用下不动点的个数,也就是长度为 1 的循环的个数。G 将 [1,n] 划分成 l 个等价类。
l=1|G|g∑j=1c1(aj)例子:正方形顶点二着色只考虑旋转的等价类个数
正方形红蓝二着色的旋转置换群
枚举的结果:等价类的个数为 6,下面看 Burnside 引理的做法
首先把置换写出类,然后看置换的个数,和 1 阶循环的个数
l=14∑f∈G(16+2+4+2)=6Burnside 的困境
首先我们回顾以下转动群:
正方形顶点,红蓝二着色,只考虑旋转的转动群 G。
首先画出图像,共 16 个。
转动群 G=a1,a2,a3,a4,共 4 个置换。分别对应度数为 0, 90, 180, 270 的情况。
将 G 中的 4 个置换写成循环的形式。然后看一阶循环的个数,然后套用 Burnside 引理即可求出等价类的个数。
下面看一个 Burnside 解决不了的问题:
6 种颜色,给正方体着色,一面一色,每面的颜色都不同,问有多少种涂法。
首先本题可以用组合数的方法解决:
先把正六面体固定住,顶面与底面的颜色选法为 6 * 5 = 30
,当顶面与底面已经选定后,剩下的四个面构成了一个圆,用圆排列的公式套进去,即可得到总的方案数为
如果要用 Burnside 引理,则需要先找到置换群 G=a1,…,ag,而要写出所有的置换 aj,就要先写出所有的图像,通过图像去看有哪些置换。
当我们画出所有图像后,我们需要研究下面两件事,这里我们没有画出具体图像,但是我们可以知道共有 6! 种图像。
- G 中有多少个置换
- 对于每个置换 aj,我们还要找到有多少个一阶循环。
对于第一个问题,我们通过以下三步做
step1: 每个面打标号 (1, 2, 3, 4, 5, 6)
step2: 找转轴,对面轴、对棱轴、对角线轴
step3: 分析正六面体的置换方法
具体的转轴如下
- 不动,共 1 个
- 对面轴转 180, -180,共 2×3=6 个
- 对面轴转 90,共 3 个
- 对棱轴转 180,共 6 个
- 对角线轴转 120, -120,共 2×4=8 个
我们没有将 6! 所有图象列出来,我们只是分析了有多少个不同的置换,以及各个置换有多少个不动点(一阶循环)。
因此总共的置换个数 |G|=24,因为各个面颜色不同,因此 2 ~ 5 这些置换中均无一阶循环,而 1 这个置换中有 6! 个一阶循环。
由 Burnside 引理
l=1|G|g∑j=1c1(aj)=6!24=30如果各个面可以同色,则问题规模(着色图像集)就大了。(从 6! 变成了 66)
此外在各个置换下的不动点情况就复杂了。
Polya定理
从例子看 Polya 与 Burnside 的变化
原来是先找出所有图像,再找出这些图像的置换群。以【正方形顶点二着色只考虑旋转】为例,有 16 种图像,其旋转置换群中有 4 个置换(4 种旋转)。
现在是直接考虑结构,也可以写出置换群。例如将正方形顶点打标。
(12344123)这样写出来的是【正方形四顶点着色结构】的置换群 ˉG。
这个置换群中的置换有 4 个
结构置换群中的置换 | 旋转类型 | 与 Burnside 中各项的对应 |
---|---|---|
¯p1=(1)(2)(3)(4) | 0 | 24 |
¯p2=(4,3,2,1) | 90 | 21 |
¯p3=(1,3)(2,4) | 180 | 22 |
¯p4=(1,2,3,4) | 270 | 21 |
在结构置换群中的置换中,同意括号内着同色,执行对应旋转后图像不变。
通过结构群中置换与 Burnside 中各项 c1(aj) 的对应,我们发现
c1(aj)=mc(¯pj)其中 c(¯pj) 为 ¯pj 中的循环个数。由于是二着色,m = 2。
这样不用找图像群的一阶循环个数了,而只需要找【着色对象结构的置换群中循环个数】。
Polya 定理完整描述
下面我们看一下 Polya 定理的完整描述。与 Burnside 引理对比。
- Burnside 引理
G=a1,a2,…,ag 为目标集 [1, n] 上的置换群。每个置换写成不相交循环的乘积。
G 将 [1, n] 划分为 l 个等价类
c1(aj) 为在置换 aj 下不动点(一阶循环)个数,则
- Polya 定理
ˉG=¯p1,¯p2,…,¯pg 为【n个对象】的置换群。
c(¯pj) 为置换 ¯pj 的循环个数。
m 中颜色对 n 个对象着色,则
注意【G 和 ˉG,的置换个数相等】,例如都是 4 种旋转。
其中
- G 对应所有图像(n 个对象染色后的方案集合)
- ˉG 对应所有结构(n 个对象)
桥梁就是
c1(a)=mc(ˉp)Polya 定理例题
等边三角形,3 顶点,用 3 色着色,求方案数。
首先看一下对象,由于是三角形,对 3 个顶点着色,对象就是 3 个顶点,记为 [1, 3]。
然后看一下 3 个对象 [1, 3] 上的结构置换群。注意本题没说只考虑旋转
(1) 旋转
旋转有 3 种,也就是 0, 120, 240。分别记为 ¯p1,¯p2,¯p3,画图分析后,写出
¯p1=(1)(2)(3),c(¯p1)=3¯p2=(1,2,3),c(¯p2)=1¯p3=(1,3,2),c(¯p3)=1(2) 翻转
翻转也有 3 种,也就是 3 个转轴的翻转,记为 ¯p1,¯p2,¯p3,画图分析后,写出
¯p4=(1)(2,3),c(¯p4)=2¯p5=(1,3)(2),c(¯p5)=2¯p6=(1,2)(3),c(¯p6)=2通过以上分析,我们知道 |ˉG|=6,m=3,以及各个 c¯pj
l=1|ˉG|g∑j=1mc(¯pj)=16(33+31+31+32+32+32)=10三种不同色的珠子,串成四个珠子的环形项链,求方案数
首先看对象个数,由于一共是 4 个珠子,n = 4
然后看 [1, 4] 中,结构置换群的置换个数,注意本题也没说只考虑旋转。
(1) 旋转
旋转一共有 4 种,也就是 0, 90, 180, 270,分别记为 ¯p1,¯p2,¯p3,¯p4。
¯p1=(1)(2)(3)(4),c(¯p1)=4¯p2=(1,4,3,2),c(¯p2)=1¯p3=(1,3)(2,4),c(¯p3)=2¯p4=(1,2,3,4),c(¯p4)=1(2) 翻转
翻转共有 4 种,也就是共有 4 个转轴。分别记为 ¯p5,¯p6,¯p7,¯p8。
¯p5=(1)(3)(2,4),c(¯p5)=3¯p6=(1,3)(2)(4),c(¯p6)=3¯p7=(1,2)(3,4),c(¯p7)=2¯p8=(1,4)(2,3),c(¯p8)=2通过以上分析,我们知道 |ˉG|=8,m=3,以及各个 c¯pj
l=1|ˉG|g∑j=1mc(¯pj)=18(34+31+32+31+33+33+32+32)=21立方体旋转
例如: 正六面体转动群
- 面置换: 6 个面
- 棱置换: 12 条棱
- 顶点置换: 8 个顶点
顶点置换
考虑 [1, 8] 上的置换群中的置换
用k阶循环的形式表示置换 | 该置换的个数 |
---|---|
(1)8 | 1 |
(2) 面面中心转动
置换形式 | 用k阶循环的形式表示置换 | 该置换的个数 |
---|---|---|
旋转 90 | (4)2 | 2 种方向, 3 种转轴, 6 |
旋转 180 | (2)4 | 1 种方向, 3 种转轴, 3 |
(3) 棱中对棱中转
置换形式 | 用k阶循环的形式表示置换 | 该置换的个数 |
---|---|---|
旋转 180 | (2)4 | 6 种转轴, 6 |
(4) 对角线为轴转
置换形式 | 用k阶循环的形式表示置换 | 该置换的个数 |
---|---|---|
旋转 120 | (1)2(3)2 | 2 种方向, 4 种转轴, 8 |
综合以上各个置换的形式及其个数。|ˉG|=24,顶点置换的问题就好解了,下面看一个问题
l=1|ˉG|g∑j=1mc(¯pj)=124(1×28+6×22+3×24+6×24+8×24)=23用 2 种色对 8 个顶点着色,求方案数
面置换
(1) 不动
用k阶循环的形式表示置换 | 该置换的个数 |
---|---|
(1)6 | 1 |
(2) 面面中心旋转
置换形式 | 用k阶循环的形式表示置换 | 该置换的个数 |
---|---|---|
旋转 90 | (1)2(4)1 | 2 种方向, 3 种转轴, 6 |
旋转 180 | (1)2(2)2 | 1 种方向, 3 种转轴, 3 |
(3) 棱中对棱中转
置换形式 | 用k阶循环的形式表示置换 | 该置换的个数 |
---|---|---|
旋转 180 | (2)3 | 6 种转轴, 6 |
(4) 对角线为轴转
置换形式 | 用k阶循环的形式表示置换 | 该置换的个数 |
---|---|---|
旋转 120 | (3)2 | 2 种方向, 4 种转轴, 8 |
综合以上各个置换的形式及其个数。|ˉG|=24,面置换的问题就好解了,下面看一个问题
l=1|ˉG|g∑j=1mc(¯pj)=124(1×26+6×23+3×24+6×23+8×22)=10正 6 面体 6 个面,2 着色的方案数
下面是一个 Burnside 未解决的问题
l=1|ˉG|g∑j=1mc(¯pj)=124(1×66+6×63+3×64+6×63+8×62)=2226正 6 面体 6 个面,6 着色的方案数
骰子6个面,1~6 点数,有多少种组织方式
注意本题与正6面体6个面6着色的不同,这里 1~6 必须全都用上。因此不能套 Polya
注意到当 6 个面颜色都不同的时候,24 个面置换中,只有【不动】这一种置换(记为 e)是有一阶循环(执行一次置换后图像不变)的,其中一阶循环个数为 6! (6! 种图像)。 因此适合用 Burnside 做。 l=1|G|g∑j=1c1(aj)=124(c1(e))=124(6!)=30本题也可以用母函数型 Polya,后面会介绍。 如果考虑 2, 3, 6 的方向问题,由于 2, 3, 6 各有 2 个方向,因此方案数变为 30×23=240  >正六面体,每个面任意做一条对角线,求方案数 **注意本题与正6面体6个面2着色的不同,这里旋转后,同一面斜线的方向可能改变,但颜色在旋转后是不会改变的。** 因此置换群与正6面体6个面2着色是一样的,但不是简单套 polya 就可以的,这里关注的是旋转后的不动图像其中没有不动图像的置换,在 Polya 中对应的项不考虑。
欧拉定理
如何思考空间中的凸多面体
- 欧拉定理: v + f - e = 2
- 平面多边形内角和为 180(v - 2)
- 欠角: 与一个顶点相关的面角之和与 360 的差为欠角
- 凸多面体各顶点的欠角和为720
问题1
用正五边形搭的正多面体有多少顶点,多少条棱,多少个面
问题2
足球有多少个正五边形,多少个正六边形
问题3
参考棱的二着色,但要考虑火柴的方向用火柴搭一个足球有多少方案
60顶点,90棱,12五边形,20六边形
考虑其结构置换群
(1) 不动, (1)90
(2) 5边形面心对面心转 72n, (5)(90/5), (n=1,2,3,4), 6对面心, 共 24 个置换
(3) 6边形面心对面心转 120n, (3)(90/3), (n=1,2), 10对面心, 共 20 个置换
(4) 6边形与6边形边界中点为轴转180, (1)2(2)44 共 15 对, 共 15 个置换 (这种情况无不动图像)
8 个骰子,叠成正六面体,求方案数
每个正六面体有 24 种转动,每个骰子占据一个顶点,相当于顶点的 24 着色(对应24种转动方法)。
套用 Polya 即可,注意没有不动图像的置换在 Polya 中对应的项不考虑。
母函数型 Polya
Polya 可以给出着色方案数,但是对每种着色方案,有哪些具体方案是不知道的。
母函数型 Polya 可以解决具体方案的问题,分为两部分
Polya: 负责计数
母函数: 负责枚举
母函数负责枚举的例题
对三个相同的球用 4 种颜色 r,y,g,b 染色,问所有可能的颜色组合。
将 (r+y+g+b)3 展开即可。
母函数型 Polya 引入题
三种颜色的珠子,串成4珠子项链,有哪些方案
之前我们用 Polya 定理求出了方案数,这里要找具体方案,需要把母函数引入进来
这里我们还是要研究置换
(1) 旋转
旋转一共有 4 种,也就是 0, 90, 180, 270,分别记为 ¯p1,¯p2,¯p3,¯p4。
置换 | 循环个数 | 具体循环 | 母函数 |
---|---|---|---|
¯p1=(1)(2)(3)(4) | c(¯p1)=4 | 4个1阶循环 | (r+b+g)4 |
¯p2=(1,4,3,2) | c(¯p2)=1 | 1个4阶循环 | (r4+b4+g4) |
¯p3=(1,3)(2,4) | c(¯p3)=2 | 2个2阶循环 | (r2+b2+g2)2 |
¯p4=(1,2,3,4) | c(¯p4)=1 | 1个4阶循环 | (r4+b4+g4) |
(2) 翻转
翻转共有 4 种,也就是共有 4 个转轴。分别记为 ¯p5,¯p6,¯p7,¯p8。
置换 | 循环个数 | 具体循环 | 母函数 |
---|---|---|---|
¯p5=(1)(3)(2,4) | c(¯p5)=3 | 2个1阶循环+1个二阶循环 | (r2+b2+g2)(r+b+g)2 |
¯p6=(1,3)(2)(4) | c(¯p6)=3 | 2个1阶循环+1个二阶循环 | (r2+b2+g2)(r+b+g)2 |
¯p7=(1,2)(3,4) | c(¯p7)=2 | 2个2阶循环 | (r2+b2+g2)2 |
¯p8=(1,4)(2,3) | c(¯p8)=2 | 2个2阶循环 | (r2+b2+g2)2 |
8 个置换 Polya 定理求总数
l=1|ˉG|g∑j=1mc(¯pj)=18(34+31+32+31+33+33+32+32)=21将 Polya 中引进母函数
P(ˉG)=18((b+r+g)4+(b4+r4+g4)1+(b2+r2+g2)2+(b4+r4+g4)1+(b2+r2+g2)(b+r+g)2+(b2+r2+g2)(b+r+g)2+(b2+r2+g2)2+(b2+r2+g2)2)化简后得到
P(ˉG)=b4+r4+g4+b3r+br3+b3g+bg3+r3g+rg3+2r2g2+2r2b2+2b2g2+2rbg2+2rgb2+2bgr2其中的项是染色方法,系数是方法的方案数。上式中系数相加刚好是 21。
化简过程可以通过 Python 的 sympy 辅助。代码如下
expand 的功能就是对表达式展开。
1 | import sympy |
得到的答案如下
1 | 1.0*b**4 + 1.0*b**3*g + 1.0*b**3*r + 2.0*b**2*g**2 + 2.0*b**2*g*r + 2.0*b**2*r**2 + 1.0*b*g**3 + 2.0*b*g**2*r + 2.0*b*g*r**2 + 1.0*b*r**3 + 1.0*g**4 + 1.0*g**3*r + 2.0*g**2*r**2 + 1.0*g*r**3 + 1.0*r**4 |
母函数型 Polya 的完整描述
对比 Polya
l=1|ˉG|g∑j=1mc(¯pj)其中 m 就相当于是使用颜色的方案(使用 m 个颜色)
如果再细化一下,假设对 n 个对象具体用 b1,b2,…,bm 这 m 个颜色,则将
mc(¯pj)改为
(b1+b2+...+bm)c1(¯pj)×(b21+b22+...+b2m)c2(¯pj)×...×(bn1+bn2+...+bnm)cn(¯pj)代替即可。
母函数型 Polya 例题
题目1
等边三角形 r, g, b 三着色,有多少种方案
还是首先考虑置换群
置换 | 个数 | 母函数 |
---|---|---|
(3)1 | 2 个 | 2(r3+g3+b3) |
(1)1(2)1 | 3 个 | 3(r+g+b)(r2+g2+b2) |
(1)3 | 1 个 | (r+g+b)3 |
用三个 r 的方案数,找 r3 的系数
(2+3+1)/6=1用两个 g 一个 b 的方案数,找 g2b 的系数
题目2
4个红珠子,放在正6面体4个顶点上,有多少方案。
还是首先研究置换群: 正六面体顶点着色的置换群
置换形式 | 置换 | 该置换的个数 | 母函数 |
---|---|---|---|
不动 | (1)8 | 1 | (r+b)8 |
面面中心,旋转 90 | (4)2 | 2 种方向, 3 种转轴, 6 | (r4+b4)2 |
面面中心,旋转 180 | (2)4 | 1 种方向, 3 种转轴, 3 | (r2+b2)4 |
棱中对棱中, 旋转 180 | (2)4 | 6 种转轴, 6 | (r2+b2)4 |
对角线为轴旋转 120 | (1)2(3)2 | 2 种方向, 4 种转轴, 8 | (r+b)2(r3+b3)2 |
综合以上各个置换的形式及其个数。|ˉG|=24
用 r, b 这 2 种色对 8 个顶点着色的方案数可以直接用 Polya,如下
l=1|ˉG|g∑j=1mc(¯pj)=124(1×28+6×22+3×24+6×24+8×24)=23但这里我们限定必须是 4 个红色,4 个蓝色,就需要用母函数型 Polya 展开,找 r4b4 的系数
首先我们写出母函数型 Polya
P(ˉG)=124((r+b)8+6(r4+b4)2+3(r2+b2)4+6(r2+b2)4+8(r+b)2(r3+b3)2)化简后找到 r4g4 的系数即可。
题目3
骰子6个面,1~6 点数,有多少种组织方式
首先研究置换群: 正六面体面着色的置换群
六种颜色记为 a, b, c, d, e, f,写出母函数型 Polya 后,找 abcdef 的系数即可。
置换形式 | 置换 | 该置换的个数 | 母函数 |
---|---|---|---|
不动 | (1)6 | 1 | (a+b+c+d+e+f)6 |
面面中心, 旋转 90 | (1)2(4)1 | 2 种方向, 3 种转轴, 6 | (a+b+c+d+e+f)2(a4+b4+c4+d4+e4+f4) |
面面中心, 旋转 180 | (1)2(2)2 | 1 种方向, 3 种转轴, 3 | (a+b+c+d+e+f)2(a2+b2+c2+d2+e2+f2)2 |
棱中对棱中旋转 180 | (2)3 | 6 种转轴, 6 | (a2+b2+c2+d2+e2+f2)3 |
对角线为轴旋转 120 | (3)2 | 2 种方向, 4 种转轴, 8 | (a3+b3+c3+d3+e3+f3)2 |
用 sympy 展开,代码如下
1 | import sympy |
得到的展开式长度非常长,其中 abcdef 的系数为 30。这与我们之前用 Burnside 的结论相同。
题目4
正四面体,点 4 着色,面 3 着色,棱 2 着色,求方案数
同时考虑顶点置换,面置换,棱置换的 Polya
题目5
4个球 a, a, b, b,放入 3 个不同盒子,求方案数
如果不允许空盒子,求方案数
法1: 容斥原理
法2: 母函数型 Polya
图的计数
引子
n个顶点的简单图有多少种(完全图的二着色)
首先还是研究置换群: 完全图的置换,与立方体的区别是它不再是刚体,例如可以只交换上方的两个点而其余点的位置不变,此时边随点动。
- 不仅仅旋转和翻转
- 对应点的全置换,即对称群
4顶点完全图对应 S4 (所有 4 阶排列)
题目
4个顶点不同构的图的个数
S4 的每个置换,对应 6 条边的集合上的一个置换
4个顶点不同构的有向图的个数
还是枚举顶点置换,考虑边置换