zoukankan      html  css  js  c++  java
  • 组合数学及其应用——polya计数

      在处理类似下面的问题中,一般的计数方法会出现问题:假如你要用红、蓝两种颜色给一个正四面体的四个顶点着色,试问存在多少种不同的着色方案?

      在高中我们常用的方法是模拟涂色过程,分情况讨论,然后基于分步乘法原理。但是在那里没有考虑几何体通过旋转等操作带来的对称性,在本文中,我们就来介绍一种专门处理这类问题的工具——Polya计数。

      首先我们要做的是引入一些基本的概念。 

       置换:

     

    关于置换更多的细节我们在《抽象代数基础教程》中继续讨论,这里我们只需简单的了解其概念即可。

    关于置换还需要了解的就是它的合乘运算。

    置换这个工具可以方便我们符号化图形的对称分析过程,下面给出要给非常简单的例子,以帮助理解置换如何描述几何体的对称。

    考察如下的正方形。

    (一个正方形,四个顶点为1234)

    我们需要去思考,如何利用置换来描述那些运动,使得正方形位置没变(但是对应标号的顶点可能发生了移动)。

    容易看到符合要求的运动有两类。

    1)  将正方形绕中心旋转(取顺时针即可)0°、90°、180°、270°.

    2)  将正方形按照两条对角线和两条对边中点连线,立体得翻转180°。

    那么我们可以发现运动前的正方形顶点序号和运动后的,其实就形成了一个置换。

    此时我们开始给出染色方案的数学描述。

    基于以上的铺垫,我们可以给出Burnside引理,用于给出一个计数非等价着色数的公式。

    在给出Burnside定理之后,我们下面结合几个简单的题目,来加强对这个定理的理解。

    问题到这里,就得到很大的改观,之前我们需要基于置换群和着色集合,进行遍历考察来计算Burnside定理和式的一般项,而现在我们只需要,分析置换群G中的每个置换,然后结合颜色数,就可以进行计算了。

    我们还需要进一步努力,因为从定理4可以看到,我们用k种颜色形成着色集合,是没有显示颜色的出现次数的,而如果规定某种颜色的出现的次数,我们应该如何处理呢?

    最后我们给出立方体的非等价的染色分析,在一般带的考察polya的题目中容易考察但是其对称群较为繁冗容易出错,因此最好一次分析之后记住结论。

    例子(立方体的顶点与面的着色):

    用制定数量的颜色对立方体的顶点和面进行着色,尝试求立方体的对称群和非等价的着色方案数目。

    考察立方体的对称操作,它们一共可分为如下的四种类型共24种对称:

    (1) 恒等对称1个。

    (2) 固定一对对立面进行旋转:

      (a)90°

      (b)180°

      (c)270°

    由于共有三对对立面,所以上面各有3个共9个。

    (3) 绕一对对边重点连线旋转180°,由于有6对,这里有6个对称。

    (4) 绕对顶点进行旋转:

        (a)120°

        (b)240°

    可以看到一个立方体的对称群友24个置换,下面我们只需要考察每个置换f的type(f),以期得到立方体的非等价染色的生成函数。

    同理我们可以对面对称群进行完全一样的讨论,结果如下:

  • 相关阅读:
    数据结构八树和森林
    数据结构 七 二叉树的遍历
    python 的 encode 、decode、字节串、字符串
    TCP/IP
    pg 数据库操作
    nginx + lua 的 跳转命令
    lua string 下的函数
    lua 的匹配规则
    nginx的 ngx.var ngx.ctx ngx.req
    docker 网络模式 和 端口映射
  • 原文地址:https://www.cnblogs.com/rhythmic/p/7281749.html
Copyright © 2011-2022 走看看