解析组合技巧

来源:互联网 发布:联合大数据 编辑:程序博客网 时间:2024/05/17 00:10

介绍

解析组合的主要思想是利用数学分析的方法来分析组合对象的性质,主要用于“组合类“的计数问题,它的最基本形式类似初等组合数学里面的母函数方法。

我们考察如下问题:

考虑一个n+2边的凸多边形M,每个顶点标注为0n+1(逆时针)。一个三角剖分是将M分为一系列内部不相交的三角形。问:有多少种剖分方法?

这是一个典型的组合计数问题,由于对于任意三角剖分使得M的每条边属于唯一的三角形,所以我们考虑边(0,n+1)对应的三角形的另一个顶点A。容易知道A一共有n种可能,每种可能将M分成两个分别具有i,j个顶点的凸多边形,使得i+j=n1。记ann+2个顶点的凸多边形三角剖分个数,我们可以的到如下递推式(不难发现这就是Catalan数):

an=i=0n1aiani1,(n2), a0=a1=1.(1)

f(x)=a0+a1x++anxn+an的组合生成函数,通过观察(并不十分显然)可以发现:
f(x)=1+xf(x)2(2)

所以通过泰勒展开式可以的到
an=1n+1(2nn).

解析组合思想

事实上我们上面的例子所用的方法就是传统的组合生成函数法,我们先通过组合直观得到了递推式(1),然后再将其转化成母函数对应的函数方程(2)。但第二个转换过程并不十分直观,解析组合的思想即是通过一些组合算子直接将组合直观转换成其生成函数的函数方程。

定义(组合类):一个组合类是一个可数集合A,以及一个大小函数f:=SN,使得对任意自然数nN{f1(n)}是有穷的,其个数记为An。一般的,对任意aA我们记f(a)=|a|

定义(计数序列):组合类A的一个计数序列是指(An)n0

定义(类等价):两个组合类A,B是等价的,当且仅当其对应的计数序列相同,记为AB

定义(OGF):计数序列(An)n0的一般计数函数(OGF)是指形式幂级数:

A(z)=n=0Anzn.
因此,对于任意组合类A其一般计数函数等价为:
A(z)=aAz|a|.

我们接下来定义几个简单组类合构造算子(A,B为组合类):

  1. 笛卡尔积:C=A×B={(a,b)aA,bB},其大小函数定义为|(a,b)|C=|a|A+|b|B
  2. 不交并:C=A+B=(A×{})(B×{})。这里,大小为0,且C的大小函数继承自原类。
  3. 序列:C=SEQ(B)={ϵ}+B+(B×B)+(B×B×B)+,这里ϵ大小为0

利用这些算子,我们构造如下复杂的算子:

周期循环:CYC(B)=(SEQ(B){ϵ})/S,这里S表示等价关系:

(b1,b2,,bl) S (b1,b2,,bl)
当且仅当(bi)(bi)的一个循环移位

重集:MSET(B)=SEQ(B)/R,这里R表示等价关系:

(b1,b2,,bl) R (b1,b2,,bl)
当且仅当(bi)(bi)的一个任意置换

幂集:PSET(B)MSET(B),表示B的所有有穷子集构成的集合,即MSET(B)中没有重复元素的元组。

主定理

组合算子和计数函数方程有如下对应:

A=B+CA=B×CA=SEQ(B)A(z)=B(z)+C(z)A(z)=B(z)C(z)A(z)=11B(z)

A=PSET((B))A(z)=n1(1+zn)Bnexp(k=1(1)k1kB(zk))

A=MSET((B))A(z)=n1(1zn)Bnexp(k=01kB(zk))

A=CYC((B))A(z)=k=1φ(k)klog11B(zk)
这里φ(k)为欧拉函数。

这些对应直接验证即可,或参考:Page 27 of [1]

一个OGF应用的例子

对任意正整数n,它的一个划分是指一个无序数组(x1,x2,,xk),xiN+使得x1++xk=n(例如1+2+12+2是不同划分,但和1+1+2是相同的)。问:n一共有多少种不同的划分?

我们记N={1,2,3,}为所有整数构成的组合类,其大小即为其对应的整数值。记所有整数划分构成的组合类为M,其大小函数即为数组的和。

显然,我们有:M=MSET(N)。另一方面,如果我们记Z为由单个大小为1的元素组成的组合类,那么N=SEQ(Z)。所以由上面的对应关系我们有:

M(z)=m=111zm.

至此,我们已经得到了M的生成函数,但我们并不能显然的得到他的幂级数的系数。我们可以用所谓的“鞍点估计法”(参考Chapter VIII of [1])得到Mn=eO(n)

参考文献

[1]. Philippe Flajolet and Robert Sedgewick. Analytic Combinatorics. Cambridge University Press 2009.

1 0