zoukankan      html  css  js  c++  java
  • Burnside引理和Polya定理之间的联系

    最近,研究了两天的Burnside引理和Polya定理之间的联系,百思不得其解,然后直到遇到下面的问题:

    对颜色限制的染色

    例:对正五边形的三个顶点着红色,对其余的两个顶点着蓝色,问有多少种非等价的着色?

    其中置换的方法有旋转 (0^{circ}, 72^{circ}, 144^{circ}, 216^{circ}, 288^{circ}), 穿过一个点做对称轴进行翻转。

    Burnside引理的证明

    那么,在解决这个问题之间,我们首先要定义和证明一些东西:

    在集合(X)的置换群的作用下,设(G)(X)的置换群,(C)(X)的着色集,且(G)作用在(C)下。

    定义(c)(小写)保持不变的(G)中所有的置换的集合:

    [G(c) = {f: fin G, f*c=c} ]

    上面的公式含义就是:对于每一个确认的着色方案,我们都能确定一个置换的集合,使得集合内任意元素和(c)运算后的结果保持不变(感觉可以看成一个等价类)。

    使着色(c)保持不变的所有的置换群的集合(G(c))称为(c)的稳定核。

    (f)的作用下使着色(c)保持不变的(C)中的所有的着色集,(确定一个(f),就能得到一个(c)的集合)

    [C(f) = {c: cin C, f*c=c} ]

    这个就是后面的求解过程中,对于每一种置换,统计不动点的方式。

    推论1:设(c)(C)中的一种着色,那么与(c)等价的着色数

    [left | { f*c:f in G} ight | ]

    等于(G)中的置换数除以(c)的稳定核中的置换数的个数:

    [frac{|G|}{|G(c)|} ]

    证明:

    对于每一个置换(f),恰好存在(|G(c)|)个置换,这些置换作用在(c)上与(f)有相同的效果。因为总共有(|G|)个置换,所以与(c)等价的着色数为

    [frac{|G|}{|G(c)|} ]

    是不是感觉一头雾水。。。没关系,我们通过一个典型的例子来进一步的解读:

    例:对正方形的4个小格用两种颜色着色,可得多少种不同的图像?置换的方式有旋转0°,90°,180°,270°。

    先画出所有的涂色方案:

    假设我们选择涂色方案(f_1),在16中涂色的方案中,有多少的涂色方案预期等价呢?

    [G(f_1) = {旋转0°, 旋转90°,旋转180°,旋转270°}\ |G(f_1)| = 4 \ herefore 16中涂色方案中,有frac{|G|}{|G(f_1)|} = 1种方案与其等价\ 同理:G(f_3) = {旋转0°}\ |G(f_3)| = 1\ herefore 16中涂色方案中,有frac{|G|}{|G(f_3)|} = 4种方案与其等价, 它们分别是f_3, f_4, f_5, f_6\ ]

    下面就是关键了!!

    Burnside定理:设(G)(X)的置换群,而(C)(X)中一个满足下面条件的着色集合:对于(G)中所有的(f)(C)中的所有的(c)都有(f*c)仍在C中,则(C)中非等价的着色数(N(G, C)):

    [N(G, C) = frac{1}{|G|}sum_{fin G}|C(f)| ]

    证明:

    采用两种不同的计数的方法,然后使计数相等,最后化简求解。

    一种方式是考察(G)中的每一个(f),并计算(f)保持着色不变的着色数然后求和。

    [sum_{f in G}|C(f)| ]

    另外一种方式就是考察(C)中的每一个(c),对保持不变的着色方案数求和:

    [sum_{c in C}|G(c)| ]

    两种计数方式的总和相等:

    [sum_{f in G}|C(f)| = sum_{c in C}|G(c)| ]

    由推论1:

    [|G(c)| = frac{|G|}{与c等价的着色数} ]

    因此:

    [sum_{c in C}|G(c)| = |G|sum_{c in C}frac{1}{与c等价的着色数} ]

    又在一个等价类里面,每一个元素的贡献都是:

    [frac{1}{与c等价的着色数} ]

    一个等价类的和就是1。

    所以:

    [sum_{c in C}|G(c)| = |G|*N(G,C)\ herefore sum_{f in G}|C(f)| = |G|*N(G,C)\ herefore N(G,C) = frac{sum_{f in G}|C(f)|}{|G|} ]

    是不是感觉一脸懵逼,没关系,我们继续用上面的例子来说明:

    [两种等价的计数方式为:\ (16+4+2+2) = (4+4+1+1+1+1+1+1+1+1+2+2+1+1+1+1)\ 24 = (4*2+1*4+1*4+2*2+1*4),右边的为(权重*个数),个数和为16\ 24 = 24\ 以上我们解释了两种计数方案的相等性。\ \ \ \ 继续:\ 24 = 4*(frac{1}{1}+frac{1}{1}+frac{1}{4}*4+frac{1}{4}*4+frac{1}{2}*2+frac{1}{4}*4)\ 发现右边的每一个等价类的权重和都为1 ]

    好了,我们这样就证明好了Burnside引理。

    Polya定理

    实际上,Polya定理仅仅是改变了Burnside引理右边的计数的方法,这使得计数变得更加的简单。

    我们知道,在使用Burnside引理的时候我们首先要枚举出来所有的染色方案数,然后在每种置换的情况下,统计所有的染色方案不变的情况。这样的时间复杂度为置换数染色方案数(O(置换数*染色方案数)),进一步可知,我们的染色的方案数的时间空间复杂度是幂次级别的。

    以例1为例,我们仅考虑每一个格点,不考虑位置,我们进行下面的计算:

    [Q:left{egin{matrix} q_1 = (1)quad(2)quad(3)quad(4), & 旋转0°\ q_2 = (1quad 2quad 3quad 4) &, 逆时针旋转90°\ q_3 = (1quad 3)quad(2quad 4), & 逆时针旋转180°\ q_4 = (4quad 3quad 2quad 1)& 逆时针旋转270° end{matrix} ight. ]

    注意(q_2, q_4)是两种不同的方案,他们是这样产生的:

    [q_2 = egin{pmatrix} 1 & 2 & 3 & 4\ 2 & 3 & 4 & 1 end{pmatrix} = (2quad 3quad 4quad 1) = (1quad 2quad 3quad 4), 可以进行轮换换序\ q_4 = egin{pmatrix} 1 & 2 & 3 & 4\ 4 & 1 & 2 & 3 end{pmatrix} = (4quad 3quad 2quad 1) ]

    置换(f)的循环分解中的循环个数记为

    [#(f) ]

    定理2:

    (f)是集合(X)的置换。如果我们用(k)种颜色对(X)的元素进行着色。设(C)(X)所有的着色的集合。则(f)中保持着色不变的着色数为:

    [|C(f)| = k^{#(f)} ]

    这个式子并没有证明,意思就是每一个循环节看成一个等价类,这个等价类里面的元素的颜色全都相同。

    然后我们就可以愉快的给出Polya的表示的形式了:

    Polya定理

    (Q)(为了区分(G),实际上它们两的数量是相等的)是n个对象的一个置换群,用m种颜色涂染这n个对象,一个对象涂任意一种颜色,则在(Q)作用下不等价的方案数为:

    [L = frac{1}{|G|}sum_{f in G}m^{#(f)} ]

    有了上面的这些定理之后呢,我们还是不能证明我们最初的问题,还需要一个工具:母函数!!!

    母函数求解本质不同的染色问题

    例2:用4种颜色涂3个编号分别为1,2,3的求,设颜色为b(蓝),g(绿),r(红),y(黄)。

    解:

    [P(b_1, b_2, b_3, g_1, g_2, g_3, r_1, r_2, r_3, y_1, y_2, y_3)\ =(b_1+g_1+r_1+y_1)(b_2+g_2+r_2+y_2)(b_3+g_3+r_3+y_3) ]

    展开后就能得到所有的64种方案了。

    那么我们仅仅关系用了哪些颜色,而不关心在哪些球上染色呢?

    我们可以有:

    [P(b, g, r, y) = (b+g+r+y)^3 \ =(b^3+g^3+r^3+y^3)+[(3b^2g+3b^2r+3b^2y)+(3g^2b+3g^2r+3g^2y)+(3r^2b+3r^2g+3r^3y)+\ (3y^2b+3y^2g+3y^2r)+(6bgr+6bgy+6bry+6gry)] ]

    它们的系数和是64,将使用颜色相同的视为同一种方案的话,本质不同的染色方案数为20,因为有20个项。

    例3:用3种颜色b(蓝),r(红色),y(黄色)染4个不同的球, 将4个球分为2组,每组2个,要求同组的球色相同。

    [P(b_1, b_2, r_1, r_2, y_1, y_2)\ =(b_1^2+r_1^2+y_1^2)(b_2^2+r_2^2+y_2^2) ]

    展开后可以得到所有的方案。

    我们改变Polya的表示方式,使之便于代入母函数。

    Polya定理的母函数表示

    我们将一个置换分解成若干的循环节之后。假设f的循环因子分解有(e_1)个1循环,(e_2)个2循环,(dots, e_n)个n循环。

    [1*e_1+2*e_2+dots+i*e_i+dots+n*e_n=n ]

    那么循环数(#(f))

    [#(f) = e_1+e_2+dots+e_n ]

    因为循环的类型仅取决于循环因子分解中的循环的阶数,与元素在哪一个循环中无关。所以,不同的置换可以有相同的类型,我们试图定义不同的类型来群分置换,所以引进n个未定的变元:

    [z_1, z_2,dots,z_n ]

    定义f的多项式为:

    注释:它的定义是为了后面运用母函数的方便。

    [mon(f) = z_1^{e_1}*z_2^{e_2}dots z_n^{e_n} ]

    于是, 对于(G)中的每一个置换(f)的单项式进行求和,我们得到关于(G)中的置换按照类型的生成函数

    [sum_{f in G}mon(f) = sum_{f in G}z_1^{e_1}z_2^{e_2}dots z_n^{e_n} ]

    合并同类项,(z_1^{e_1}z_2^{e_2}dots z_n^{e_n})的系数等于同种置换类型的个数。

    于是(G)的循环指数定义为该生成函数除以(G)中的置换的个数(|G|),

    [P_G(z_1, z_2, dots, z_n) = frac{1}{|G|}sum_{f in G}z_1^{e_1}z_2^{e_2}dots z_n^{e_n} ]

    我们以例1进行相应的说明:

    变换的类型 置换拆分 置换的类型 单项式
    旋转0° (1) (2) (3) (4) (4, 0, 0, 0) (z_1^4)
    旋转90° (1 2 3 4) (0, 0, 0, 1) (z_4)
    旋转180° (1 3) (2 4) (0, 2, 0, 0) (z_2^2)
    旋转270° (4 3 2 1) (0, 0, 0, 1) (z_4)

    定理3:

    (X)是元素集合,(G)(X)的置换群,({u_1, u_2, dots, u_k})是k种颜色的集合,C是X的任意着色集。这时,针对各颜色的数目C的非等价着色数的生成函数是

    [P_G(z_1=u_1+u_2+dots+u_k, z_2=u_1^2+u_2^2+dots u_k^2, dots, z_n = u_1^n+u_2^n+dots+u_k^n) ]

    这里其实就是将((z_1, z_2, dots, z_n))替换成多项式,至于为什么可以这样替换,可以体会一下前面举的一些关于生成函数统计不同的方案数的例子。

    我们还是用例1来体会:

    设颜色为w(白色),b(黑色)

    [P_G(z_1 = w+b, z_2=w^2+b^2, z_3 = w^3+b^3, z_4=w^4+b^4) \ =frac{1}{4}(z_1^4+z_2^2+2z_4) = w^4+w^3b+2w^2b^2+wb^3+b^4 ]

    我们将它的系数相加,得到答案为6,与Burnside引理和前面的一般的Polya公式的计算结果一致!

    实际上,我们为什么可以用(m^{#(f)})代入一开始的Polya公式呢?实际上生成函数也可以解释,生成函数的系数和必然为(m^{#(f)})

    哈哈,终于把所有的知识和需要用的定理铺盖完毕!

    下面,我们来解决我们最初的问题:

    例:对正五边形的三个顶点着红色,对其余的两个顶点着蓝色,问有多少种非等价的着色?

    其中置换的方法有旋转 (0^{circ}, 72^{circ}, 144^{circ}, 216^{circ}, 288^{circ}), 穿过一个点做对称轴进行翻转。

    Burnside引理的解法

    置换方式P 循环因子分解(Polya定理使用) 不变的着色数
    旋转(0^{circ})
    旋转(72^{circ})
    旋转(144^{circ})
    旋转(216^{circ})
    旋转(288^{circ})
    过1号点翻转
    过2号点翻转
    过3号点翻转
    过4号点翻转
    过5号点翻转

    首先表示出所有的情况:

    我们按照Burnside的定义,填写第三列的值:

    旋转(0^{circ}):

    [p_1 = egin{pmatrix} 1& 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 \ 1& 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 end{pmatrix} = (f_1)(f_2)(f_3)(f_4)(f_5)(f_6)(f_7)(f_8)(f_9)(f_{10}) ]

    发现有16个不动点。

    顺时针旋转(72^{circ}) :

    [p_2 = egin{pmatrix} 1& 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 \ 5& 6 & 7 & 1 & 8 & 9 & 2 & 10 & 3 & 4 end{pmatrix} = (f_5 f_8 f_{10} f_4 f_1)(f_6 f_9 f_3 f_7 f_2) ]

    发现有0个不动点。

    顺时针旋转(144^{circ}):

    [p_3 = egin{pmatrix} 1& 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 \ 8& 9 & 2 & 5 & 10 & 3 & 6 & 4 & 7 & 1 end{pmatrix} = (f_8 f_4 f_{5} f_{10} f_1)(f_9 f_7 f_6 f_3 f_2) ]

    发现有0个不动点。

    同理我们算出旋转(216^{circ}, 288^{circ}) 的不动点的个数都是0。

    穿过1号点(最上面的点,顺时针依次标号为1, 2, 3, 4, 5)的对称轴:

    [p_6 = egin{pmatrix} 1& 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 \ 5& 2 & 9 & 8 & 1 & 7 & 6 & 4 & 3 & 10 end{pmatrix} = (f_5 f_1)(f_2)(f_3 f_9)(f_8 f_4)(f_7 f_6)(f_{10}) ]

    有两个不动点。

    同理,依次通过2, 3, 4, 5号点的对称轴,进行翻转的不动点都为2个。

    于是我们可以填写下面的表:

    置换方式 循环因子分解(Polya定理使用) 不变的着色数
    旋转(0^{circ}) 10
    旋转(72^{circ}) 0
    旋转(144^{circ}) 0
    旋转(216^{circ}) 0
    旋转(288^{circ}) 0
    过1号点翻转 2
    过2号点翻转 2
    过3号点翻转 2
    过4号点翻转 2
    过5号点翻转 2

    由Burnside引理,我们可以计算出不同等价类的染色数目为:

    [L = frac{10+0*4+2*5}{10} = 2 ]

    实际上,我们有一个很直观的理解:

    两个蓝色要么连在一起,要么两个蓝色中间间隔一个红色,总共有两种本质不同染色方案数。

    Polya定理解法

    Polya定理的基本形式:用m种颜色(C ={c_1, c_2, dots, c_m} 涂染个对象涂染n个对象S = {1, 2, dots, n}), 在S的置换群Q作用下, 不等价的方案数为:

    [L = frac{1}{left | Q ight |}sum_{qin Q} m^{lambda(q)} ]

    我们先填写第二列的表:

    仅仅对节点进行变换,不考虑颜色。

    旋转(0^{circ}):

    [p_1 = egin{pmatrix} 1& 2 & 3 & 4 & 5 \ 1& 2 & 3 & 4 & 5 end{pmatrix} = (1)(2)(3)(4)(5) ]

    旋转(72^{circ}):

    [p_1 = egin{pmatrix} 1& 2 & 3 & 4 & 5 \ 2& 3 & 4 & 5 & 1 end{pmatrix} = (2quad 3 quad4quad 5quad 1) = (1quad 2 quad3quad 4quad 5) ]

    旋转(144^{circ}):

    [p_1 = egin{pmatrix} 1& 2 & 3 & 4 & 5 \ 3& 4 & 5 & 1 & 2 end{pmatrix} = (3quad 5 quad2quad 4quad 1) = (1quad 3 quad5quad 2quad 4) ]

    同理我们可以算出旋转(216^{circ}, 288^{circ})的循环节。

    经过1号节点的对称轴:

    [p_1 = egin{pmatrix} 1& 2 & 3 & 4 & 5 \ 1& 5 & 4 & 3 & 2 end{pmatrix} = (1)(2quad 5)(3quad 4) ]

    同理可以计算经过其他的节点进行翻转的循环节。

    然后我们就可以填写下面的表了:

    置换方式P 循环因子分解(Polya定理使用) 循环节的类型((z_1, z_2, z_3, z_4, z_5))
    旋转(0^{circ}) (1) (2) (3) (4) (5) (5, 0, 0, 0, 0)
    旋转(72^{circ}) (1 2 3 4 5) (0, 0, 0, 0, 1)
    旋转(144^{circ}) (1 3 5 2 4) (0, 0, 0, 0, 1)
    旋转(216^{circ}) (1 4 2 5 3) (0, 0, 0, 0, 1)
    旋转(288^{circ}) (1 5 4 3 2) (0, 0, 0, 0, 1)
    过1号点翻转 (1) (2 5) (3 4) (1, 2, 0, 0, 0)
    过2号点翻转 (1 3) (2) (4 5) (1, 2, 0, 0, 0)
    过3号点翻转 (1 5) (3) (2 4) (1, 2, 0, 0, 0)
    过4号点翻转 (1 2) (3 5) (4) (1, 2, 0, 0, 0)
    过5号点翻转 (1 4) (2 3) (5) (1, 2, 0, 0, 0)

    1个(5, 0, 0, 0, 0), 4个(0, 0, 0, 0, 1), 5个(1, 2, 0, 0, 0)类型的

    然后我们代入母函数:

    [P_Q (Z_1, Z_2, Z_3, Z_4, Z_5) = frac{1}{left |Q ight |}*(Z_1^5+4*Z_5+5*Z_1Z_2^2) \ P_Q (r+b, r^2+b^2, r^3+b^3, r^4+b^4, r^5+g^5) = frac{1}{10}((r+b)^5+4(r^5+b^5)+5(r+b)(r^2+b^2)^2) \ =frac{1}{10}(10r^5+10r^4b+20r^3b^2+20r^2b^3+10rb^4+10b^5) ]

    我们单独观察(r^3b^2)的系数,发现是(frac{20}{10} = 2),与我们的Burnside引理的计算结果一致!!

  • 相关阅读:
    使用 %matplotlib inline 出错?
    RandomForest 调参
    sql中的笛卡尔积
    Sublime text 3 搭建Python3 IDE
    在Windows Python3.5 安装LightGBM
    lodash获取数组或对象的值 at
    lodash 移除数据元素 pull without 删除数组元素
    js 常用类型转换简写
    UTC时间格式转换
    CSS Flexible 布局兼容性以及解决方案
  • 原文地址:https://www.cnblogs.com/babydragon/p/10106472.html
Copyright © 2011-2022 走看看