【组合数学】 02 - Möbius反演公式

  计数问题种类繁多,为了避免陷入漫无目的烧脑运动,我们先需要关注一些常用方法和结论。数学的抽象性和通用性是我们一直推崇的,从诸多特殊问题中发现一般性的方法,也总会让人兴奋和慨叹。一般教材多是以排列组合开篇,采用了一些技巧性很强的初等方法来讨论组合计数,我倒觉得可以直接先掌握一些锋利的工具,到时再看那些问题,会有快刀斩乱麻之快感。

1. 关联代数

1.1 一个例子

  为了对反演公式有个直观的认识,我们从一个简单的问题说起,考察数列的求和公式(1)。左式表示当知道数列的每一项an时,就可以得到前n项的和sn,右式表示知道和sn也可以反推到项an。整理一下这段陈述中的要素,有两个定义在自然数集上的函数f(n),g(n)f(n)可以由g(1),,g(n)线性表出,g(n)也可以由f(1),,f(n)线性表出,结论是这两个线性表出是等价的,由其中一个可以推导出另一个。

(1)sn=a1+a2++anan=snsn1

  这样的互逆推导现象被称为反演,现在来深入寻找其中的模式。有了线性代数的知识,以上推导式其实就是一个简单的线性方程组(式(2))。有两点需要强调,一点是由于递推式的特点,两边的矩阵都是下三角可逆矩阵。另一点是,这个表达式对任意的n都成立,其中的向量和方阵都可以看成是无限维的。第二点让我们把注意力吸引到了方阵上(设两边分别为A,B),因为不管n是多少,两边的方阵在aij,bij的取值都是相同的!

(2)[s1s2sn]=[111111][a1a2an][a1a2an]=[11111][s1s2sn]

1.2 偏序集

  看来我们已经把问题引入到了无限维下三角方阵上来,而讨论的目标则是它的逆元。为了得到这样的扩展,我们用另一种方法来描述下三角方阵。首先它定义在正整数集的二元关系(x,y)上,其次只有当xy时有意义。我们知道正整数集是一个全序集,任意两个数之间都是“可比”的,下三角矩阵就是“可比”关系的函数。既然要扩展定义,我们不妨把这个函数定义在稍弱一点的“序集”上,只需要局部是“可比”的,反演在局部应该也是有意义的。

  具体来说,我们来回顾集合论中的偏序集,定义集合X的二元关系,它满足自反率、反对称性、传递性,并称之为偏序。定义了偏序的集合也称为偏序集(partially ordered set),其中有二元关系的两个元素称为可比的,可比元素之间的所有元素称为截断,记为[x,y]。偏序集可以用Hasse图来直观地表示,图中只连接了直接可比的元素(上大下小),整体看起来呈现网状结构。除了整数集之外,常见的偏序集还有:集合间的包含关系、正整数间的整除关系等。

  偏序集可以是无限的,但为了便于讨论,我们假定局部是有限的,即[x,y]是有限集。如果把偏序关系全部倒过来,得到的显然还是偏序集,且和原集是同构的,没有本质区别,它们称为对偶的。另外,对于偏序集X1,X2,,Xn,容易知道直积X1××Xn在式(3)定义下也是偏序集。如果记n元集合的所有子集在包含关系下的偏序集为B(n),则易知它同构于n2元链L2的直积L2n。再记n之内的整数在整除关系下的偏序集为D(n),设n=p1e1pkek,则易知它同构于Le1+1××Lek+1

(3)(x1,x2,,xn)(y1,y2,,yn)x1y1xnyn

1.3 关联代数

  现在在偏序关系X上定义函数α(x,y)X×XR,当x⩾̸yα(x,y)=0。为讨论它们的代数结构,记所有函数的集合为I(X),在上面定义加法和数乘是平凡的。参考矩阵乘法的定义,可以按式(4)定义函数的乘法αβ,可以证明乘法满足结合律。在抽象代数中我们知道,这样的结构叫做结合代数,在这里我们称它为偏序集X关联代数(incidence algebra),也记作I(X)

(4)(αβ)(x,y)=xzyα(x,z)β(z,y)

  容易验证以下函数δ就是关联代数的单位元,下面讨论关联代数中的逆元。假设βα=δ,固定x的值,由乘法的定义可有式(6)。如果α(x,x)0,显然可递推得到任何一个β(x,y),这就得到了α存在逆元的充要条件:α(x,x)0。还可以确定,β(x,y)完全取决于z[x,y]α(z,y)的值。另外值得注意的是,逆元β不仅与α有关,还与偏序集的结构有关。

(5)δ(x,y)={1,(x=y)0,(xy)

(6)β(x,x)α(x,x)=1,xzyβ(x,z)α(z,y)=0

  特别地,定义式(7)中的常用函数ζzeta函数,它的逆μ显然存在,被称之为Möbius函数。由式(6)可得到μ的递推式(8),它只包含0,±1,具体值与偏序集的结构有关。设偏序集X1,,Xk上有函数δi,ζi,μi,对于它们的直积X,首先显然有式(9)的前两式成立,式(10)的推导和逆元的唯一性也说明了第三式成立。

(7)ζ(x,y)={1,(xy)0,(x⩾̸y)

(8)μ(x,x)=1,μ(x,y)=xz>yμ(x,z)

(9)δ(x,y)=i=1kδi(xi,yi);ζ(x,y)=i=1kζi(xi,yi);μ(x,y)=i=1kμi(xi,yi)

(10)δ(x,y)=i=1kxiziyiζi(xi,zi)μi(zi,yi)=xzyi=1kζi(xi,zi)μi(zi,yi)

2. Möbius反演公式

2.1 反演公式

  有了以上准备工作,现在把例子中的问题进行扩展。为了避免对无限的讨论,先限定对任意x,小于它的元素有限,这样的偏序集称为下有限的。同样可以定义上有限,以下结论对上有限也有对应的结果。设f(x),g(x)是定义在偏序集X上的函数,而α,βI(X)中的互逆元,则需要证式(11)成立。

(11)f(x)=yxα(x,y)g(y)g(x)=yxβ(x,y)f(y)

  为了论证方便,可以把的下标换成任意值y(因为当y⩽̸xα(x,y)=0),证明时,只需把f(y)=zα(y,z)g(z)带入右式中的yβ(x,y)f(y)即可。过程从略,同样的方法可以验证。特别地,对zeta函数有Möbius反演公式(式(12))成立,而式(11)是它的推广形式,这些结论都是美国数学家Rota在1964年发表的。

(12)f(x)=yxg(y)g(x)=yxμ(x,y)f(y)

  当偏序集是有限集时,关系代数其实可以表示成方阵,这时反演公式其实就是线性方程组的解。为了显式地表示式(11)的递推关系,我们需要把方阵的行(列)按照偏序集元素的从小到大的顺序排列,这就需要把偏序关系扩展成全序关系。这一点是不难做到的,首先对n=1的偏序集已经是全序集,当n>1时先把一个极小值记作x1,其它n1个元素仍然构成偏序集。由归纳法知它们可以扩展成全序集x2xn,这时全序集x1xn就是满足条件的扩展。这个全序集的关联代数的方阵就是下三角矩阵,元素可逆的充要条件是:方阵的对角元素非零。

2.2 反演公式的应用

2.2.1 递推数列

  接下来具体讨论几个常见偏序集,先从最简单的单链Ln开始,则有式(13)的反演公式。把数列f(n),g(n)分别看成是行向量F,G,再把它们的递推关系表示为互逆的下三角方阵A,B,反演公式其实就是平凡的F=AGG=BF。特别地,Lnζ,μ分别可以表示为式(2)中的矩阵。以上结论对n=同样成立,F,G就变成无穷维行向量,A,B就是无穷维下三角方阵。

(13)f(n)=k=1nankg(k)g(n)=k=1nbnkf(k)

  有时候我们需要得到除ζ,μ之外的互逆函数(方阵),而利用两个关系简单的数列就可以反过来求互逆函数。这里拿多项式举例(以下假定读者有高中排列组合知识),假设有两个多项式序列{pn(x)},{qn(x)},其中pk(x),qk(x)的阶都是k,容易证明它们可以互相唯一线性表示。如果能某个关联函数能找到适当的多项式序列,那它的逆也就容易求得。比如考察pn(x)=xnqn(x)=(x1)n,则显然有下式成立,所以二项式矩阵aij=(ij)的逆元就是bij=(1)ij(ij),它被称为二项式的反演公式

(14)pn(x)=k=0n(nk)qk(x);qn(x)=k=0n(1)nk(nk)pk(x)

  二项式是非常常用的数列,利用这个反演公式可以解决一些很难的计数问题。比如考虑把n封信拆开重装,记有k封信装错的的装法有Dk个,这个数称为错位排列数,以后还会讨论。因为n封信的随意排列有n!种,而这其中可以分为有0,1,,n封装错的情况,从而有式(15)左式,由二项式反演公式就得到式(15)右式。

(15)n!=k=0k(nk)DkDn=k=0n(1)nk(nk)k!

  特别地,当qn(x)=pn(x)时,它们的关联函数与自己互逆。以下记(x)n=x(x1)(xn+1),考察pn(x)=(x)nqn(x)=(x)n,因为对任意整数m有式(16)成立。因为多项式之间的线性表示唯一,从而将m换成x等式也成立,这就得到了式(17),对应的反演公式被称为Lah反演公式

(16)(1)n(m)nn!=(m+n1n)=k=0n(n1k1)(m)kk!

(17)(x)n=k=0nlnk(x)n(x)n=k=0nlnk(x)n,lnk=(1)nn!k!(n1k1)

2.2.2 容斥原理

  本节讨论集合A的子集簇B(A)在包含关系下的偏序集,这里只讨论ζ,μ函数。前面已经知道,B(A)是同构于L2n的,而L2μ函数为[1011]。如果子集ST,则利用公式(9)易知μ(S,T)=(1)|S||T|,这个结论马上要用到。

  现在要讨论B(A)的函数f(S),g(S),并且它们有关系f(S)=TSg(T)。为了使问题直观且有意义,可以建立如下模型:设集合的每个元素有属性集X={P1,P2,,Pn}中的部分属性,我们比较关心的集合有两种:恰好有属性子集T中的所有属性元素个数N=(T),和至少有T中所有属性的元素个数N(T)

  这个模型还有一个我们更熟悉描述方法,记所有含有性质Pk的元素为Ak,则A1,,An可以看作是全集An个子集。把n种性质简记为[n],属性子集T则为[n]的一个子集,式(18)说明了两种描述的等价关系。对另一个熟悉的集合A1Ak,可以先讨论它的逆A¯1A¯k,将模型缩小为k个属性,它其实就是N=()

(18)N(T)=|iTAi|;N=(T)=|(iTAi)(jTAj)|

  在实际问题中,N(T)更容易求得,因为它只需关注具有属性集T元素。N=(T)则比较难计算,但我们容易有式(19)左边的关系。它们满足属性子集的对偶偏序集上的反演公式,则容易有式(19)右边的结论。特别地有式(20)成立,它还有个直观的描述,不含有任何性质的元素可以这样计数:先在全集A中分别去除Ai的个数,然后加上被重复去除的AiAj,再加上多去除的部分……。这个过程就是在反复地去除再添加,因此式(20)也叫容斥原理

(19)N(T)=STN=(S)N=(T)=ST(1)|S||T|N(S)

(20)|A||A1An|=N=()=k=0n(1)k|S|=kN(S)

  容斥原理是个很古老的结论,这里利用反演公式的证明比任何初等证明都清晰。之前其实我们已经运用过这个结论,这里再举几个例子。先来回顾一下错位排列问题,把第i位没有排错作为性质Pi。至少有k位排列正确的个数有(nk)(nk)!,利用容斥原理并整理得式(21)左,它和式(15)其实是一样的。有趣的是还有式(21)右成立,它说明信封完全装错的概率趋于1/e

(21)Dn=n!k=0n(1)kk!;limnDnn!=1e

  再来看欧拉函数φ(n),它表示[n]中与n互素的数的个数。设n的全部质因数是p1,,pk,以被pi整除为性质Pi[n]中至少被m个质因数整除的个数是npi1pim。利用容斥原理并整理得式(22),它也有显然的概率论意义:不被pi整除 与不被pj整除是独立事件。

(22)φ(n)=n(11p1)(11p2)(11pk)

   计算[n]中与n互素的数之和;(提示:计算能整除p1pi的数之和,答案12nφ(n)

   字母a1,,an各有两个,用它组成的2n元字中,相同字母不相邻的字有多少个?

2.2.3 经典反演公式

  最后来讨论正整数集在整除关系下偏序集,其实这是Möbius反演公式的最初原型。当d|n时,先来计算μ(n,d),为此考虑偏序集D(n),其中n=p1e1pkek。前面知道它同构于Le1+1××Lek+1μi(ni,di)ni,di分别是n,dpi的幂)当ni=di相等时为1,当ni=dipi时为1,其它为0

  利用公式(9)可以证明,μ(n,d)只与m=nd有关,由此可直接记作μ(m)。它就是经典Möbius函数,易知它有表达式(23),其下的经典Möbius反演公式便是式(24),之前的反演公式是推广后的结论。

(23)μ(m)={(1)r,all ei=10,others,(m=p1e1prer,all ei>0)

(24)f(n)=d|ng(d)g(n)=d|nμ(nd)f(d)

posted on   卞爱华  阅读(2498)  评论(0编辑  收藏  举报

编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架

导航

点击右上角即可分享
微信分享提示