【组合数学】 05 - 经典计数方法

1. 基本计数的母函数

  现在来用母函数来求解基本计数问题,母函数既可以完成自动计数,还能表示计数本身,像Stirling数这种就只能用母函数表示。自动计数适用于可以分步的计数问题,并且目标值是每步值之和,这与多项式的运算性质有关。

1.1 组合数和分划数

  直观上最符合这一特点的就是模型2,从\(n\)个可区别对象中选出\(m个\)。限制第\(k\)个对象被取的次数在集合\(M_k\)中,它被选情况的母函数是\(\sum\limits_{i\in M_k}x^i\),所有元素被选择的情况可以借助母函数(1)自动计数,共选取\(m\)个元素的个数是\(x^m\)的系数。特别地,不可重复组合数的母函数是\((1+x)^n\),可重复组合数的母函数是\(\dfrac{1}{(1-x)^n}\)(注意\(1+x+x^2+\cdots=\dfrac{1}{1-x}\)),满射的母函数是\(\dfrac{x^n}{(1-x)^n}\)。

\[\sum_{k=0}^{\infty}c_kx^k=\prod_{i=1}^n\left(\sum_{j\in M_i}x^j\right)\tag{1}\]

  对于模型4的分拆数,考虑到\(1^{\lambda_1}2^{\lambda_2}\cdots m^{\lambda_m}\)型分拆要满足上篇式(14),它也可以用母函数自动计数。对长度为\(k\)的分部使用\(x^{k\lambda_k}\),故长度为\(k\)的分部的母函数是\(1+x^k+x^{2k}+\cdots=\dfrac{1}{1-x^k}\)。所以\(p(m)\)的母函数便是式(2),由于\(p(m,k)\)等于最大分部为\(k\)的分拆数,故它的母函数是式(3)。

\[\sum_{n=0}^{\infty}p(n)x^n=\prod_{i=1}^{\infty}(1-x^i)^{-1}\tag{2}\]

\[\sum_{n=0}^{\infty}p(n,k)x^n=x^k\prod_{i=1}^k(1-x^i)^{-1}\tag{3}\]

  值得一提的是,欧拉当初就是在研究分划数时发现母函数方法的。即使有式(2),\(p(m)\)的性质还是不清楚,我们注意到(2)的逆\(q(x)\)相对比较简单,值得讨论一下。\(q(x)\)有一个还算显然的组合意义,每一项系数的绝对值是分部互异的分划数,符号的意义则是分部数为奇数和偶数时分划数的差。利用这一组合意义辅助讨论(过程见教材),不难得到\(q(m)\)满足式(4)。继而可得到\(p(m)\)的递推关系式(5),它被称为欧拉公式

\[q(m)=\left\{\begin{matrix}(-1)^k,&\text{if}\;m=\frac{1}{2}(3k^2\pm k)\\0,&\text{if}\;m\ne\frac{1}{2}(3k^2\pm k)\end{matrix}\right.\tag{4}\]

\[p(m)=\sum_{k=1}^{\infty}(-1)^{k-1}\left(p(m-\frac{3k^2-k}{2})+p(m-\frac{3k^2+k}{2})\right)\tag{5}\]

   利用母函数证明:分部都为奇数的分划数等于分部互异的分划数。

1.2 指数型母函数

  对于模型1的排列数,简单的相加显然不再满足,考察上篇式(2),这就启发我们用\(\dfrac{x^k}{k!}\)代替\(x^k\)(式(6))。对于数列\(c_n\),级数(6)被称为数列的指数型母函数,它对排列问题非常适用。同上面的分析,\(n\)个互异元素中选\(m\)个排列的母函数是式(7)。特别地,无重复排列数的母函数是\((1+x)^n\),可重复排列数的母函数是\(e^{nx}\)(注意\(1+x+\dfrac{x^2}{2!}+\cdots=e^x\)),满射排列数的母函数则是\((e^x-1)^n\)。

\[\sum_{k=0}^{\infty}c_k\dfrac{x^k}{k!}=c_0+c_1\dfrac{x}{1!}+c_2\dfrac{x^2}{2!}+c_3\dfrac{x^3}{3!}\cdots\tag{6}\]

\[\sum_{k=0}^{\infty}c_k\dfrac{x^k}{k!}=\prod_{i=1}^n\left(\sum_{j\in M_i}\dfrac{x^j}{j!}\right)\tag{7}\]

  最后趁热看一下模型3中的Stirling数,由于\(k!S(m,k)\)就是模型1中的满射,利用满射排列数的母函数容易知\(S(m,k)\)的指数型母函数(式(8)),利用指数型母函数也可以得到上篇式(26)。为了得到\(s(m,k)\)的指数型母函数\(g_k(x)\),从上篇式(27)右得到启发,先计算\(g_k(x)\)的母函数得到\((1+x)^y\)(过程略,二层母函数使用\(y\)),展开\(y\)的幂级数便得到\(s(m,k)\)的指数型母函数(9)。有了指数型母函数,Stirling数的性质就可以通过母函数研究,比如对母函数求导能得到递推关系式(10)(11)。

\[\sum_{m=0}^{\infty}S(m,k)\dfrac{x^m}{m!}=\dfrac{1}{k!}(e^x-1)^k\tag{8}\]

\[\sum_{m=0}^{\infty}s(m,k)\dfrac{x^m}{m!}=\dfrac{1}{k!}(\ln(1-x))^k\tag{9}\]

\[S(m,k)=\sum_{i=k-1}^{m-1} \binom{m-1}{i}S(i,k-1)\tag{10}\]

\[s(m,k)=\sum_{i=k-1}^{m-1}(-1)^{m-i-1}(m-1)_{m-i-1}s(i,k-1)\tag{11}\]

   求每个元素取到偶数个的排列数。

2. Pólya计数定理

2.1 引言和环状字

  基本计数问题中只涉及了两个最极端的拓扑结构,但在阐述的过程中,我们一直强调了同构类的思想。这里将推广这个思想,并将其用到更多的拓扑结构中。所谓同构,就是将拓扑结构中的元素置换,元素间的关系和置换后一致,它的代数意义就是我们熟悉的\((a,b)=(f(a),g(a))\)。我们这里就不再说元素可区分、不可区分了,每个元素单独看都无差别,它的差异性完全由其在拓扑结构中的位置决定。

  比如图中的环状拓扑,直觉上说每个元素是“不可区分”的,但它们却不能随便置换。当把\(a\)置换到\(a‘\)时,为了保持\(a,b\)的关系,\(b\)只能置换到\(b‘\),所以这个拓扑中的同构就只能是整个图的旋转。再来看另一个环状拓扑,它除了旋转之外,延虚线的翻转也是同构置换。最后的立方体,其中包括更多同构置换,它们都与我们的直觉对应,就是变动后仍与以前一样。为了简单起见,以下我们只讨论原像是复杂拓扑,而像是可区分集的问题。它的等价模型就是给拓扑结构的元素染色,这时的同构当然还要求元素被置换到同样颜色的元素。

  如果原像是左图的\(m\)阶有向环形,用\(n\)种颜色为其染色(或写入\(n\)种字母),结果被称为\(m\)元环状字,同构环状字的个数记作\(C_n(m)\)。先将环形固定并对其染色,将环状字进行旋转,得到的不同染色方案便是该染色同构的个数。如果颜色出现的最小周期为\(d\),易知共可以得到\(d\)个不同的染色,则有\(n^m=\sum\limits_{d|m}dM(d)\),其中\(M(d)\)是最小周期为\(d\)染色数(同构意义下)。利用反演公式可以得到\(mM(m)=\sum\limits_{d|m}\mu(\dfrac{m}{d})n^d\),从而有环状字的计数公式(12)。

\[C_n(m)=\sum_{d|m}\sum_{d‘|d}\mu(\dfrac{d}{d‘})\dfrac{n^{d‘}}{d}\tag{12}\]

2.2 Pólya计数定理

  现在对问题做一般性的讨论,先假设原像是可区分的,在其上进行染色,得到了染色方案集\(X\)。还有对原像拓扑(不含颜色)进行同构置换的变换集\(G\),对任意\(g\in G\),它都是一个变换\(g:X\to X\)。当对\(x_1,x_2\in X\),当存在\(g\in G\)使得\(g(x_1)=x_2\)时,称\(x_1,x_2\)是等价的,而我们的问题就是求等价类的个数。

  容易证明对每个拓扑结构,其所有的同构置换在复合运算下是封闭的,从而构成一个群。又由于它是置换群的子集,故也称对称群。\(G\)对\(X\)的变换满足条件(13),该变换是\(G\)在\(X\)上的“作用”,你需要先回顾一下“群的作用”相关知识。从两个维度分别讨论\(g(x)=x\),可以得到等价类的个数\(N(G)\)满足式(14)的Burnside定理,其中\(F_g\)表示满足\(g(x)=x\)的\(x\)的个数。如果对每个\(x\in X\)加权\(w(x)\),并使得同一等价类中的元素权值相同,则有Burnside定理的加权版(式(15)),其中\(x_k\)是第\(k\)的等价类的代表元。

\[(g_1g_2)(x)=g_1(g_2(x));\;\;e(x)=x\tag{13}\]

\[N(G)=\dfrac{1}{|G|}\sum_{g\in G}|F_g|\tag{14}\]

\[\sum_{k=1}^{N(G)}w(x_k)=\dfrac{1}{|G|}\sum_{g\in G}(\sum_{x\in F_g}w(x))\tag{15}\]

  在染色问题中,我们比较关心一个染色方案使用的颜色组合,为了体现这个信息,给每个颜色赋上权值\(y_i\)。而一个染色方案的权值则是\(y_1^{k_1}y_2^{k_2}\cdots y_n^{k_n}\),其中\(k_i\)是颜色\(i\)出现的次数,且有\(k_1+k_2+\cdots+k_n=m\)。式(15)包含了所有染色方案(同构意义下)的权值,其中我们可以得到每种颜色组合\(k_1,k_2,\cdots,k_n\)下染色方案的个数。当然式(15)的计算是通过右边的式子得到的,右边聚焦于每一个置换\(g\)本身的性质,使得问题只与拓扑结构有关。

  我们知道每个置换\(g\)其实是一些轮换的组合,比较显然(也很关键),\(g(x)=x\)的充要条件是同一轮换中的颜色相同。这里借用母函数的思想来计算\(F_g\)的权重,对长度为\(k\)的轮换,所有可能的权重之和是\(y_1^k+y_2^k+\cdots+y_n^k\)。从而对\(1^{\lambda_1}2^{\lambda_2}\cdots m^{\lambda_m}\)型置换\(g\)的,\(F_g\)的权重如式(16)。为了表述方便,把式(17)称为\(G\)的轮换指标(cycle index),显然当\(\delta_k=y_1^k+y_2^k+\cdots+y_n^k\)时便得到权重的完整表达式,它也被称为式样清单。特别地,取\(y_1=y_2=\cdots=y_n=1\)(即\(\delta_1=\delta_2=\cdots=\delta_m=n\)),便得到所有式样的个数(染色数)\(P_G(n,\cdots,n)\),这些结论就是波利亚(Pálya)计数定理

\[w(F_g)=\prod_{k=1}^n(y_1^k+y_2^k+\cdots+y_n^k)^{\lambda_k}\tag{16}\]

\[P_G(\sigma_1,\cdots,\sigma_m)=\dfrac{1}{|G|}\sum_{g\in G}\sigma_1^{\lambda_1(g)}\cdots\sigma_m^{\lambda_m(g)}\tag{17}\]

2.3 典型例子

  波利亚定理采用了类似母函数的思想,能够准确地完成自动计数,但结论并没有给出最终计数值,所以它更多的在于其理论价值。下面以图中三种拓扑结构为例,阐述波利亚定理的应用,而问题的关键其实就是式(17)的计算。

  首先是有向环,显然它的对称子群是一个\(m\)阶循环群\(C_m=\{g,g^2,\cdots,g^m=e\}\),其中\(g\)是单步旋转。容易知道,\(g^k\)是\((k,m)\)个\(\dfrac{m}{(k,m)}\)阶轮换之积,其中\((k,m)\)是最大公约数的记号。反过来考虑,对任意\(d|m\),有\(\varphi(\dfrac{m}{d})\)个\(g^k\)的轮换指标是\(\sigma_{m/d}^d\)。所以其轮换指标是式(18),进而得到环状字的个数式(19),它和式(12)其实是等价的(\(\varphi(m)=\sum\limits_{d|m}\mu(d)\frac{m}{d}\))。

\[P_{C_m}=\dfrac{1}{m}\sum_{d|m}\varphi(\dfrac{m}{d})\sigma_{m/d}^d=\dfrac{1}{m}\sum_{d|m}\varphi(d)\sigma_d^{m/d}\tag{18}\]

\[C_n(m)=\dfrac{1}{m}\sum_{d|m}\varphi(d)n^{\frac{m}{d}}\tag{19}\]

  再来看无向环,一个典型问题就是用不同颜色的珍珠能串成多少个不同的项链。它和有向环不同的是还可以进行翻转,它的对称子群\(D_m=\{g,g^2,\cdots,g^m=e,ag,ag^2,\cdots,ag^m=a\}\)被称为二面体群。其中后\(m\)个是翻转变换,当\(m\)是奇数时是\(\dfrac{n-1}{2}\)个对换,当\(n\)为偶数时,一半是\(\dfrac{n}{2}\)个对换,一半是\(\dfrac{n-2}{2}\)个对换,翻转的轮换指标如式(20)。

\[\sum_{k=1}^mw(ag^k)=\left\{\begin{matrix}\dfrac{1}{2}x_1x_2^{\frac{m-1}{2}},\;\;\;\;\;\;\;\;\;\;\;&\text{if m is odd}\\\\\dfrac{1}{4}(x_2^{\frac{m}{2}}+x_1^2x_2^{\frac{m-2}{2}}),&\text{if m is even}\end{matrix}\right.\tag{20}\]

  最后来看立方体,立方体的对称群被称为立方体的旋转群,除了单位元外,还有以下三类旋转:(1)3*3=9个以对面中心为轴的旋转;(2)2*4=8个以过对顶点直线为轴的旋转;(4)1*6个以过对边中点直线为轴的旋转。这些变换可以分别作用在顶点、边和面上,其对应的轮换指标分别为如下三式所示。

\[P_0=\frac{1}{24}(x_1^8+9x_2^4+6x_4^2+8x_1^2x_3^2)\;\;\;\;\;\;\tag{21}\]

\[P_1=\frac{1}{24}(x_1^{12}+3x_2^6+6x_4^2+8x_3^4+6x_1^2x_2^5)\;\tag{22}\]

\[P_2=\frac{1}{24}(x_1^6+3x_1^2x_2^2+6x_1^4x_4+6x_2^3+8x_3^2)\tag{23}\]

   讨论\(n\)种颜色串成的项链种数,包括规定颜色数量的情况;

   讨论\(n\)种颜色涂色立方体点、边、面的种数,包括规定颜色数量的情况。

时间: 2024-08-09 10:44:46

【组合数学】 05 - 经典计数方法的相关文章

学习总结--数学.基本计数方法

学习总结--数学.基本计数方法 一.计数方法的原理 1.加法原理:做一件事情有n中办法,第i种办法有pi种执行方案,那么总的解决这件事情的方案数即为p1+p2+p3+...+pn. 2.乘法原理:做一件事情分为n个步骤,第i个步骤的执行方案有pi种,则一共有p1?p2?p3?...?pn种方案解决该问题. 3.容斥原理:一个班级有,集合A的人喜欢数学,集合B的人喜欢英语,结合C的人喜欢语文,那么该班级的人数应该是多少? 如果我们将三个集合的人数相加起来,那么就重复计算了既喜欢数学又喜欢英语的.既

数学基础——基本计数方法

计数方法最基础的两个原理是:加法原理和乘法原理. 容斥原理: 假设一个班里有10个学生喜欢数学,15个学生喜欢语文,21个学生喜欢编程.那么班级总人数: |A∪B∪C| = |A| + |B| + |C| - |A∩B| - |A∩C| - |B∩C| + |A∩B∩C| 一般的,任意多个集合,集合内的元素个数为奇数,前面的符号为正. 问题1:排列问题 n个不同的数,选k个排成1排,有多少种排法. 答案计做p(n,k) = n*(n-1)*(n-2)*...*(n-(k-1)) = n!/(n-

实例365(13)---------经典数组排序方法------选择排序法

一:使用选择排序法对一维数组进行排序,截图 /*选择排序的个人理解:第一遍筛选,选出其中最大的值,得到值和下标 将最大的值的位置和数组的第一个位置交换 从数组的第二个位置开始第二遍筛选 将其中最大的值的位置和数组的第二个位置交换 直到筛选完数组 */ 二:代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; u

控制系统的三种经典分析方法

控制系统的三种经典分析方法 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 系列博客说明:此系列博客属于作者在大三大四阶段所储备的关于电子电路设计等硬件方面的知识和项目笔记,由于当时崇尚手写,没有进行电子录入,后来发现查阅起来比较零散且麻烦,而且不便随身携带.现将笔记中写字比较公正清晰且内容重要的部分通过扫描录入共享在我的博文中,以便有需要时随时上网查阅,同时希望能对有兴趣的读者有所帮助.内容不涉及实验室等利益,均是常规知识储备. 时域分析法 根轨迹法

实例365(14)---------经典数组排序方法------快速排序法

一:截图 二:快速排序详解 快速排序法(QuickSort)是一种非常快的对比排序方法.它也Divide-And-Conquer思想的实现之一.自从其产生以来,快速排序理论得到了极大的改进,然而在实际中却十分难以编程出正确健壮的代码.本文将对快速排序算法的基本理论和编程实践方面做作一个全面的讲解.在本文讲解中,将忽略很多细枝末节,试图给读者形成一个非常具体的快速排序形象. 快速排序---基本理论 因为该算法是Divide-And-Conquer思想的一个实现,所以本文将以Divide-And-C

POJ 3286- How many 0's?(组合数学_区间计数)

How many 0's? Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 3286 Appoint description:  System Crawler  (2015-04-18) Description A Benedict monk No.16 writes down the decimal representations of

算法竞赛入门经典行训练指南【计数方法】------2015年1月23日

基础知识整理: (1)加法原理 (2)乘法原理 (3)容斥原理(注意变式问题) (4)排列组合公式的应用及变形: 排列的公式: 其变形为: 与组合的关系如下(以下第一个公式很重要): 排列组合公式的重要推论: 推论1: 对于第一个物体如果不取的话,那么我们有C(n,k+1)种方法,对于第一个物体取的话,我有C(n,k)种方法.公式得证. 推论2: 这可以降低求解二项式系数的时间复杂度,通过利用递推关系自小到大依次计算得出,方便快捷. (5)排列组合的基本问题: Q1:求有重复元素的排列. 有k个

经典排序方法及细节小结(1)

在数据结构的学习中,排序是我们要重点学习的一部分:在掌握几种经典排序算法的同时,我们还要能够根据实际中遇到的情况,结合它们的时间复杂度.空间复杂度.稳定性这几个方面选择最合适的算法.现针对常用的几种经典排序算法和容易出错的细节总结一下: 1.插入排序 (1)直接插入排序 直接插入排序是一种最简单的排序方法,其基本思路是: ①将一条记录插入到已排好的有序表中,从而得到一个大小加1的新有序表. ②每一步将一个待排序的数据元素,按其排序码的大小,插入到前面已经排好序的一组元素的合适位置上去 ③循环①②

安卓企业开发(三) activity的四种经典传值方法

开发中遇到多个activity的传值问题 相邻两个之间的传值 或者多个三个以上之间的传值问题 但是很多同学这方面经验还是不足,说下常用的开发场景 1 一般的注册或者添加某项信息界面就会遇activity传值问题 2  比如我在一个界面提交新息  需要打开一个新的界面选择里面的信息回到当前activty的时候 现在说下比较经典的四种比较经典的传值方法 一 如果是两个相邻activity之间的传值: 可以用Intent传值 对象和单个属性都可以都可以 Intent intent =new Inten