zoukankan      html  css  js  c++  java
  • 【$Polya$定理·入门篇】浅尝辄止的$Polya$定理

    (Preface)

    群论里的东西。

    感觉跟着论文一步步看下来还是挺好理解的吧。

    前置知识

    群论的基本知识

    自然是群论中最为基础的定义。

    若对于一个集合(G)以及一个给定的二元运算(*),满足以下条件:

    • 封闭性: (forall a,bin G,a*bin G)
    • 结合律: (forall a,b,cin G,(a*b)*c=a*(b*c))
    • 单位元: (exists ein G,forall ain G,a*e=e*a=a)
    • 逆元: (forall ain G,exists bin G,a*b=b*a=e)

    就称集合(G)在运算(*)之下是一个群

    置换群

    置换群中的元素是置换(置换是什么相信大家都知道),运算就是置换的连接。

    这是一个相对简单的概念,余就不多说了。

    (Polya)定理的推导

    公式:(|E_k| imes |Z_k|=|G|)

    此处(G)是一个(1sim n)的置换群,而(k)(1sim n)的某个元素。

    (Z_k)(k)不动置换类): (G)中使(k)保持不变的所有置换记作(Z_k)。(简称(k)不动置换类)

    (E_k)等价类):(k)(G)的作用下能够变化得到的所有元素的集合记作(E_k)

    根据定义,其实很容易就能证明上面公式的正确性。

    (Burnside)引理

    首先介绍一个新的定义:

    (D(a_j)):在置换(a_j)下不变的元素个数。

    由于(|Z_k|)表示的是使(k)不变的置换个数,(D(a_j))表示的是置换(a_j)下不变的元素个数,二者显然可以建立一个等量关系:

    [sum_{k=1}^n|Z_k|=sum_{j=1}^sD(a_j) ]

    然后,假设共有(N={1,2,...,n})中共有(L)个等价类(注意,(L)就是一般情况下要求的东西),即设(N=E_1+E_2+...+E_L)

    重新考虑(sum_{k=1}^n|Z_k|),就可以发现:

    [sum_{k=1}^n|Z_k|=sum_{i=1}^Lsum_{kin E_i}|Z_k|=sum_{i=1}^L|E_i| imes|Z_i| ]

    根据最早的那个公式,(|E_k| imes |Z_k|=|G|),得到:

    [sum_{k=1}^n|Z_k|=L imes |G| ]

    简单移项得到:

    [L=frac1{|G|}sum_{k=1}^n|Z_k|=frac1{|G|}sum_{j=1}^sD(a_j) ]

    (Polya)定理

    考虑到在(Burnside)引理中的(D(a_j))依旧不好算。

    定义一个置换(g_i)的循环个数为(c(g_i))

    容易发现,对于(g_i)同一循环节中的元素涂上相同颜色所得方案数(m^{c(g_i)}),就等于(a_i)作用下不变的图象数。

    也就是说:

    [L=frac1{|G|}sum_{i=1}^sm^{c(g_i)} ]

    这就是(Polya)定理的公式了。

    (Polya)定理模板题

    题目链接:【洛谷4980】【模板】Polya定理

    考虑本质不同只需要判旋转,因此共有(n)种置换方式,其中第(i)种置换方式就是将所有数转(i)位。

    显然,第(i)种置换中环的个数应该是(gcd(i,n)),因此得到答案的式子为:

    [frac1nsum_{i=1}^nn^{gcd(i,n)} ]

    看到(gcd),自然而然想到莫比乌斯反演,按照它的经典套路,枚举(gcd)

    [frac1nsum_{d|n}n^dsum_{i=1}^{frac nd}[gcd(i,frac nd)=1] ]

    其中,后半部分的式子显然就是(phi(frac nd)),也就是:

    [frac 1nsum_{d|n}n^dphi(frac nd) ]

    因此,枚举(d),然后暴力计算(phi(frac nd)),这道题就做完了。

    参考文献

    2001 - 符文杰:《Pólya原理及其应用》

    (Postscript)

    (Polya)定理感觉应该是一个很有用的计数工具,但它的题目也都很难,余还要多加研究。。。

  • 相关阅读:
    poj 2676 Suduku (dfs)
    poj 1562 Oil Deposits (dfs)
    poj 2907 Collecting Beepers (dfs)
    poj 1655 Balancing Act (树形dfs)
    poj 3411 Paid Roads (dfs)
    hdu 2896 病毒侵袭 (AC)
    hdu 3065 病毒侵袭持续中 (AC)
    poj 2251 Dungeon Master (bfs)
    java中debug使用
    Swing入门级小项目总结
  • 原文地址:https://www.cnblogs.com/Nero-Claudius/p/Polya1.html
Copyright © 2011-2022 走看看