DennyQi's Log

05 莫比乌斯反演

反演

在容斥原理一文中,根据定义我们有

N(S)=SJN=(J)N_\geq(S)=\sum\limits_{S \subseteq J}N_=(J)

由于N(S)N_\geq(S)通常是容易计算的,而N=(J)N_=(J)是不容易计算的。容斥原理告诉我们可以这样从NN_\geq“反解”出N=N_=

N=(S)=J:SJA(1)JSN(J)N_=(S)=\sum\limits_{J:S \subseteq J \subseteq \mathscr{A}}(-1)^{|J|-|S|}N_\geq(J)

如果我们把N=N_=NN_\geq都看作P(A)N\mathcal{P}(\mathscr{A})\to\N的函数,那么上面两个式子恰好像我们解释出了从一个函数变换到另一个函数的变换公式。一般而言,把上面那个公式看作正向变换,那么下面那个公式就是反向变换,简称为“反演(inversion)”。

注意到,上面两个式子都是线性的。因此,可以用2n×2n2^n\times 2^n的矩阵来表示这两个变换。定义正向变换的矩阵为ZZ,也即

N=ZN=N_\geq = ZN_=

ZZ的元素应当是0011Z(i,j)=1Z(i,j)=1当且仅当ii对应的集合包含于jj对应的集合。例如,当坏性质个数为33时(分别记为A,B,CA,B,C),正向变换写作:

[N({})N({A})N({B})N({C})N({A,B})N({A,C})N({B,C})N({A,B,C})]=[1111111101001101001010110001011100001001000001010000001100000001][N=({})N=({A})N=({B})N=({C})N=({A,B})N=({A,C})N=({B,C})N=({A,B,C})]\begin{bmatrix}N_\geq(\{\varnothing\})\\N_\geq(\{A\})\\N_\geq(\{B\})\\N_\geq(\{C\})\\N_\geq(\{A,B\})\\N_\geq(\{A,C\})\\N_\geq(\{B,C\})\\N_\geq(\{A,B,C\})\\\end{bmatrix} = \begin{bmatrix} 1&1&1&1&1&1&1&1\\ 0&1&0&0&1&1&0&1\\ 0&0&1&0&1&0&1&1\\ 0&0&0&1&0&1&1&1\\ 0&0&0&0&1&0&0&1\\ 0&0&0&0&0&1&0&1\\ 0&0&0&0&0&0&1&1\\ 0&0&0&0&0&0&0&1\\ \end{bmatrix} \begin{bmatrix}N_=(\{\varnothing\})\\N_=(\{A\})\\N_=(\{B\})\\N_=(\{C\})\\N_=(\{A,B\})\\N_=(\{A,C\})\\N_=(\{B,C\})\\N_=(\{A,B,C\})\\\end{bmatrix}

“子集”的性质使得ZZ呈现为上三角矩阵,所以ZZ可逆。因此反演写作:

N==Z1NN_==Z^{-1}N_\geq

容斥原理已经帮我们求出了Z1Z^{-1}Z1(i,j)=(1)kZ^{-1}(i,j)=(-1)^{k},其中kkjj对应的集合大小与ii对应的集合大小的差值。Z1Z^{-1}只会在1,0,1-1,0,1间取值。

人们把ZZ称为Zeta矩阵,Z1Z^{-1}称为Mobius矩阵。

关联代数

我们知道,容斥原理中所涉及的“子集的包含关系”实际上是一种特殊的偏序关系。可以看到,Zeta矩阵与Mobius矩阵实际上都是关于该偏序关系定义的。因此我们可以做推广,在一般的偏序集上定义Zeta矩阵和Mobius矩阵。

严格来看,讨论“矩阵”要求偏序集的大小是有限的。但从数学上,当偏序集满足一些特定的性质时,人们可以定义一种类比于矩阵的代数,称为关联代数(incidence algebra)。

对于偏序集(P,)(P,\leq),一个关联代数I(P)\mathscr{I}(P)是一族P×PRP \times P \to \R的映射,满足:对于任意αI(P)\alpha\in \mathscr{I}(P)x,yP,α(x,y)0    xy\forall x,y \in P,\alpha(x,y) \neq 0 \implies x \leq y。可见,关联代数中的元素可以看作一个“无穷矩阵”。可以定义其运算法则:

  • (α1+α2)(x,y):=α1(x,y)+α2(x,y)(\alpha_1+\alpha_2) (x,y) :=\alpha_1(x,y)+\alpha_2(x,y)
  • (cα)(x,y):=cα(x,y)(c\alpha)(x,y):=c\cdot \alpha(x,y)
  • (αβ)(x,y)=zPα(x,z)β(z,y)(\alpha \beta)(x,y)=\sum\limits_{z\in P}\alpha(x,z)\beta(z,y)

乘法法则可以改写为(αβ)(x,y)=xzyα(x,z)β(z,y)(\alpha \beta)(x,y)=\sum\limits_{x \leq z \leq y}\alpha(x,z)\beta(z,y)。证明:如果x≰yx\not\leq y,则(αβ)(x,y)=0(\alpha \beta)(x,y)=0。同时,对于任意zPz\in P,不可能同时成立xzzyx\leq z\land z\leq y,所以等式右边也为00;如果xyx \leq y,那么对于任意zz,如果z<xz<xy<zy<z,那么α(x,z)β(z,y)=0\alpha(x,z)\beta(z,y)=0;如果zzxx不可比较大小或zzyy不可比较大小,也有α(x,z)β(z,y)=0\alpha(x,z)\beta(z,y)=0。证毕。

定义“单位矩阵”δ(x,y):=1[x=y]\delta(x,y):=\mathbb{1}[x=y],于是就可以定义“逆矩阵”α1\alpha^{-1}满足αα1=δ\alpha \alpha^{-1}=\delta。我们希望关联代数中元素的逆满足:左逆等于右逆;“逆”有唯一性。这对于偏序集有要求。人们通常要求偏序集满足“局部有限性”:x,yP\forall x,y\in P,满足xzyx \leq z \leq yzz的个数是有限的。下面证明,局部有限的偏序集上:

  • 左逆等于右逆:即证对于任意α,βI(P)\alpha,\beta\in \mathscr{I}(P),若αβ=δ\alpha\beta=\delta,则βα=δ\beta\alpha=\delta。由αβ=δ\alpha\beta=\delta可知,x,yP\forall x,y\in P1[x=y]=xzyα(x,z)β(z,y)\mathbb{1}[x=y]=\sum\limits_{x\leq z\leq y}\alpha(x,z)\beta(z,y)。当x=yx=y时,δ(x,x)=xzxβ(x,z)α(x,z)\delta(x,x)=\sum\limits_{x\leq z\leq x}\beta(x,z)\alpha(x,z),可见(βα)(x,x)=δ(x,x)(\beta\alpha)(x,x)=\delta(x,x)。当x,yx,y不可比较时,δ(x,y)=0\delta(x,y)=0,不存在zz满足xzyx\leq z\leq y,因此(βα)(x,y)=δ(x,y)(\beta\alpha)(x,y)=\delta(x,y) =0=0。当x<yx<y时,因为偏序集满足局部有限性,所以集合W={zxzy}W=\{z\mid x \leq z\leq y\}是有限集,可以令W={z1,,zm}W=\{z_1,\cdots,z_m\},它们按偏序关系从小到大排列。因为αβ=δ\alpha\beta=\delta,所以δ(x,y)=(αβ)(x,y)=\delta(x,y)=(\alpha\beta)(x,y)= k=1mα(z1,zk)β(zk,zm)\sum\limits_{k=1}^{m}\alpha(z_1,z_k)\beta(z_k,z_m)。定义矩阵A(i,j)=α(zi,zj),B(i,j)=β(zi,zj)A(i,j)=\alpha(z_i,z_j),B(i,j)=\beta(z_i,z_j),我们知道1i<jm\forall 1\leq i<j\leq mδ(zi,zj)=k=ijα(zi,zk)β(zk,zj)=0\delta(z_i,z_j)=\sum\limits_{k=i}^{j}\alpha(z_i,z_k)\beta(z_k,z_j)=0,也等于k=1mα(zi,zk)β(zk,zj)\sum\limits_{k=1}^{m}\alpha(z_i,z_k)\beta(z_k,z_j)。所以矩阵A,BA,B满足AB=IAB=I。根据线性代数中矩阵的左逆等于右逆,得到BA=IBA=I。因此1i<jm\forall 1\leq i<j\leq mδ(zi,zj)=k=1mβ(zi,zk)α(zk,zj)=0\delta(z_i,z_j)=\sum\limits_{k=1}^{m}\beta(z_i,z_k)\alpha(z_k,z_j)=0。所以δ(x,y)=xzyβ(x,z)α(x,y)\delta(x,y)=\sum\limits_{x\leq z\leq y}\beta(x,z)\alpha(x,y)。综上,βα=δ\beta\alpha=\delta,证毕。
  • 逆的唯一性:即证对于任意α,β,γI(P)\alpha,\beta,\gamma\in \mathscr{I}(P),若αβ=δ\alpha\beta=\deltaαγ=δ\alpha\gamma=\delta,则β=γ\beta=\gamma。由αβ=δ\alpha\beta=\delta可知,x,yP\forall x,y\in P1[x=y]=xzyα(x,z)β(z,y)\mathbb{1}[x=y]=\sum\limits_{x\leq z\leq y}\alpha(x,z)\beta(z,y);同理1[x=y]=xzyα(x,z)γ(z,y)\mathbb{1}[x=y]=\sum\limits_{x\leq z\leq y}\alpha(x,z)\gamma(z,y)。当x=yx=y时,δ(x,x)=α(x,x)β(x,x)\delta(x,x)=\alpha(x,x)\beta(x,x) =α(x,x)γ(x,x)=\alpha(x,x)\gamma(x,x),由于α(x,x)0\alpha(x,x)\neq 0,故β(x,x)=γ(x,x)\beta(x,x)=\gamma(x,x)。当x,yx,y不可比较时,β(x,y)=γ(x,y)=0\beta(x,y)=\gamma(x,y)=0。当x<yx<y时,因为偏序集满足局部有限性,集合W={zxzy}W=\{z\mid x\leq z\leq y\}是有限集,令W={z1,,zm}W=\{z_1,\cdots,z_m\}按偏序关系排列。定义矩阵A(i,j)=α(zi,zj)A(i,j)=\alpha(z_i,z_j)B(i,j)=β(zi,zj)B(i,j)=\beta(z_i,z_j)C(i,j)=γ(zi,zj)C(i,j)=\gamma(z_i,z_j)。由αβ=δ\alpha\beta=\deltaαγ=δ\alpha\gamma=\delta可知AB=IAB=IAC=IAC=I。根据线性代数中矩阵逆的唯一性,可知B=CB=C,因此β(x,y)=γ(x,y)\beta(x,y)=\gamma(x,y)。综上,β=γ\beta=\gamma,证毕。

我们看到,“局部有限性”的条件让我们把关联代数上的证明转化为了普通的矩阵上的证明。在关于“逆”的性质上,关联代数和矩阵在本质上是相同的。

莫比乌斯反演

我们用关联代数仿照容斥原理定义zeta函数ζ\zetaζ(x,y)=1[xy]\zeta(x,y)=\mathbb{1}[x \leq y]。定义莫比乌斯函数μ=ζ1\mu=\zeta^{-1}。那么偏序集上的“容斥原理”表述为:给定局部有限的偏序集(P,)(P,\leq),对于任意两个函数f,g:PRf,g:P \to\R,如果f=ζgf=\zeta g,那么g=μζg=\mu \zeta。换言之,如果xP,f(x)=xyg(y)\forall x\in P,f(x)=\sum\limits_{x \leq y}g(y),那么xP,g(x)=yPμ(x,y)f(y)\forall x\in P,g(x)=\sum\limits_{y\in P}\mu(x,y)f(y)。注意到,因为μ\mu是关联代数中的元素,只有xyx \leq yμ(x,y)\mu(x,y)才不为0,因此yPμ(x,y)f(y)=xyμ(x,y)f(y)\sum\limits_{y\in P}\mu(x,y)f(y)=\sum\limits_{x \leq y}\mu(x,y)f(y)。综上所述,我们有:

xP,f(x)=xyg(y)    xP,g(x)=xyμ(x,y)f(y)\forall x\in P,f(x)=\sum\limits_{x \leq y}g(y)\iff\forall x\in P,g(x)=\sum\limits_{x\leq y}\mu(x,y)f(y)

这称为莫比乌斯反演(Mobius inversion)。

在容斥原理中,莫比乌斯函数μ\mu有一个简单的表达式。那么,一般偏序集上的莫比乌斯函数是否也有简单的表达式?我们来做计算:因为μζ=δ\mu\zeta=\delta,因此(μζ)(x,x)=1=xzxμ(x,z)ζ(x,z)(\mu\zeta)(x,x)=1=\sum\limits_{x \leq z\leq x}\mu(x,z)\zeta(x,z) =μ(x,x)ζ(x,x)=μ(x,x)=\mu(x,x)\zeta(x,x)=\mu(x,x),所以μ(x,x)=1\mu(x,x)=1。对于x<yx<y(μζ)(x,y)=0=xzyμ(x,z)ζ(z,y)=xzyμ(x,z)(\mu\zeta)(x,y)=0=\sum\limits_{x \leq z \leq y}\mu(x,z)\zeta(z,y)=\sum\limits_{x \leq z \leq y}\mu(x,z)。所以得到xz<yμ(x,z)+μ(x,y)=0\sum\limits_{x \leq z < y}\mu(x,z)+\mu(x,y)=0,因此μ(x,y)=xz<yμ(x,z)\mu(x,y)=-\sum\limits_{x \leq z < y}\mu(x,z)。尽管这不是通项,但我们也足够满意了。因为μ\mu是关联代数中的元素,x≰yx\not\leq yμ(x,y)=0\mu(x,y)=0。这样我们就给出了莫比乌斯函数的递推表达式:

μ(x,y)={0\mboxifx≰y;1\mboxifx=y;xz<yμ(x,z)\mboxifx<y.\mu(x,y) = \begin{cases} 0 & \mbox{ if }x\not\le y;\\ 1 & \mbox{ if }x=y;\\ -\sum\limits_{x\le z<y}\mu(x,z) &\mbox{ if }x<y . \end{cases}

有的时候,函数f,gf,g满足的关系不是f(x)=xyg(y)f(x)=\sum\limits_{x \leq y}g(y)而是f(x)=xyg(y)f(x)=\sum\limits_{x \geq y}g(y),那么用ζ\zeta函数表示就必须写为f=ζgf=\zeta^{\top}g,于是g=(ζ)1fg=(\zeta^{\top})^{-1}f。可以证明(ζ)1=(ζ1)=μ(\zeta^\top)^{-1}=(\zeta^{-1})^\top=\mu^\top,因此g=μfg=\mu^{\top} f,即:

g(x)=yμ(x,y)f(y)=yμ(y,x)f(y)=yxμ(y,x)f(y)g(x)=\sum\limits_{y}\mu^\top(x,y)f(y)=\sum\limits_{y}\mu(y,x)f(y)=\sum\limits_{y \leq x}\mu(y,x)f(y)

偏序集的乘积

(P1,1),(P2,2)(P_1,\leq_1),(P_2,\leq_2),那么定义偏序集的乘积P1×P2=(P1×P2,)P_1 \times P_2 = (P_1 \times P_2, \leq)(括号内的×\times指的是笛卡尔积)。其中定义乘积偏序集中的元素(x1,y1)(x2,y2)(x_1,y_1)\leq(x_2,y_2)当且仅当(x11x2)(y12y2)(x_1 \leq_1 x_2) \land (y_1 \leq_2 y_2)

下面证明:μ((x1,y1),(x2,y2))=μ1(x1,x2)μ2(y2,y2)\mu((x_1,y_1),(x_2,y_2))=\mu_1(x_1,x_2) \cdot \mu_2(y_2,y_2)。如果(x1,y1)≰(x2,y2)(x_1,y_1) \not\leq (x_2,y_2),那么μ=0\mu=0,此时要么x1̸1x2x_1 \not\leq_1 x_2要么y1̸2y2y_1 \not\leq_2 y_2,因此要么μ1=0\mu_1=0要么μ2=0\mu_2 = 0,成立。其余情况直接依据定义代入,使用归纳法:μ1(x1,x2)\mu_1(x_1,x_2) =x1x<x2μ1(x1,x)=-\sum\limits_{x_1 \leq x<x_2}\mu_1(x_1,x)μ2(y1,y2)\mu_2(y_1,y_2) =y1y<y2μ2(y1,y)=-\sum\limits_{y_1 \leq y<y_2}\mu_2(y_1,y),而μ((x1,y1),(x2,y2))=\mu((x_1,y_1),(x_2,y_2)) = (x1,y1)(x,y)<(x2,y2)μ((x1,y1),(x,y))-\sum\limits_{(x_1,y_1)\leq (x,y)<(x_2,y_2)}\mu((x_1,y_1),(x,y))。对(x1,y1)(x_1,y_1)(x2,y2)(x_2,y_2)的链长归纳(定义为对应偏序集上x1x_1x2x_2的链长与y1y_1y2y_2的链长之和),那么运用归纳假设就得到上式中μ((x1,y1),(x,y))=μ1(x1,x)μ2(y1,y)\mu((x_1,y_1),(x,y))=\mu_1(x_1,x)\cdot\mu_2(y_1,y),因此μ((x1,y1),(x2,y2))=(x1,y1)(x,y)<(x2,y2)μ1(x1,x)μ2(y1,y)\mu((x_1,y_1),(x_2,y_2)) =-\sum\limits_{(x_1,y_1)\leq (x,y)<(x_2,y_2)}\mu_1(x_1,x)\cdot\mu_2(y_1,y) =[(x1x<x2μ1(x1,x))(y1y<y2μ2(y1,y))+μ1(x1,x2)y1y<y2μ2(y1,y)+μ2(y1,y2)x1x<x2μ1(x1,x)]=-\left[\left(\sum\limits_{x_1\leq x < x_2}\mu_1(x_1,x)\right)\left(\sum\limits_{y_1\leq y < y_2}\mu_2(y_1,y)\right)+\mu_1(x_1,x_2)\sum\limits_{y_1\leq y<y_2}\mu_2(y_1,y)+\mu_2(y_1,y_2)\sum\limits_{x_1\leq x<x_2}\mu_1(x_1,x)\right] =[(μ1(x1,x2)(μ2(y1,y2))μ1(x1,x2)μ2(y1,y2)μ2(y1,y2)μ1(x1,x2)]=-\left[(-\mu_1(x_1,x_2)(-\mu_2(y_1,y_2))-\mu_1(x_1,x_2)\mu_2(y_1,y_2)-\mu_2(y_1,y_2)\mu_1(x_1,x_2)\right] =μ1(x1,x2)μ2(y1,y2)=\mu_1(x_1,x_2)\cdot\mu_2(y_1,y_2)

由此我们变得非常容易证明最开始的容斥原理:我们定义一个只有两个元素的偏序集P({0,1},)P(\{0,1\},\leq),其中0<10<1。我们对这个偏序集连着乘nn次(这是有定义的,我们每次只乘2个偏序集),得到的偏序集记为PnP^n。于是在PnP^n中元素可以理解为一个01串,一个串小于等于另一个当且仅当后者为0的地方前者必须是0,后者为1的地方前者可以是0或1——它对应着一个2[n]2^{[n]}中集合的包含关系!那么根据莫比乌斯函数在偏序集乘法中的运算法则,对于两个二进制串(集合)x,yx,y,就有μ(x,y)=μ1(x1,y1)μn(xn,yn)\mu(x,y)=\mu_1(x_1,y_1)\cdots\mu_n(x_n,y_n),而μi(0,0)=1\mu_i(0,0)=1μi(0,1)=μi(0,0)=1\mu_i(0,1)=-\mu_i(0,0)=-1,因此μ(x,y)=(1)k\mu(x,y)=(-1)^k,其中kkx,yx,y中不同的位数的个数,这恰好对应着我们曾经用二项式定理贡献证明的容斥原理N=(S)=J:SJA(1)JSN(J)N_=(S)=\sum\limits_{J:S \subseteq J \subseteq \mathscr{A}}(-1)^{|J|-|S|}N_\geq(J)中的系数(1)JS(-1)^{|J|-|S|}

数论莫比乌斯函数

我们曾经看到过自然数上的“整除关系”也是一种偏序。所以我们对于特定的nn可以定义一个偏序集(Dn,)(D_n, \leq),其中就是所有nn的约数构成的集合,其中xyx \leq y当且仅当xyx|y

假如n=pαn=p^\alpha,其中pp是一个素数,那么DnD_n中的元素只有{1,p,p2,,pα}\{1,p,p^2,\cdots,p^\alpha\}。其中的任意两个都可以比较大小,因此这其实是一个全序集,它可以看作指数的序列{0,1,2,,α}\{0,1,2,\cdots,\alpha\}。在这个集合上的莫比乌斯函数μ(x,y)\mu(x,y)满足μ(x,x)=1\mu(x,x)=1,当x>yx>yμ(x,y)=0\mu(x,y)=0,当x<yx < yμ(x,y)=xz<yμ(x,z)\mu(x,y)=-\sum\limits_{x\leq z<y}\mu(x,z)。由于μ(x,y+1)=xz<y+1μ(x,z)=xz<yμ(x,z)μ(x,y)=μ(x,y)μ(x,y)=0\mu(x,y+1)=-\sum\limits_{x \leq z < y+1}\mu(x,z)=-\sum\limits_{x \leq z < y}\mu(x,z)-\mu(x,y)=\mu(x,y)-\mu(x,y)=0,而μ(x,x+1)=μ(x,x)=1\mu(x,x+1)=-\mu(x,x)=-1,因此有

μ(x,y)={1\mboxifx=y1\mboxifx+1=y0\mboxotherwise\mu(x,y) = \begin{cases} 1 & \mbox{ if }x=y \\ -1 & \mbox{ if }x+1=y\\ 0 &\mbox{ otherwise} \end{cases}

于是对于任意的正整数nn,它可以写成唯一的质因数分解的形式n=p1α1pkαkn=p_1^{\alpha_1}\cdots p_k^{\alpha_k}。它的所有可能的DnD_n就是每个piαip_i^{\alpha_i}中指数任意取值。这相当于每个piαip_i^{\alpha_i}对应的偏序集的笛卡尔积。所以整个偏序集就是这些小偏序集的乘积,要计算它的莫比乌斯函数也就只需要用小的莫比乌斯函数相乘。对于x<yx<y,有μ(x,y)=μ1(x1,y1)μk(xk,yk)\mu(x,y)=\mu_1(x_1,y_1)\cdots\mu_k(x_k,y_k)。根据pαp^\alpha中莫比乌斯函数的结果,我们需要考察y/xy/x的质因数分解:y/x=p1β1pkβky/x=p_1^{\beta_1}\cdots p_k^{\beta_k}。如果βi>1\beta_i>1,那么μi(xi,yi)=0\mu_i(x_i,y_i)=0,直接得到μ(x,y)=0\mu(x,y)=0。因此对于μ(x,y)0\mu(x,y) \neq 0的情况必然要求y/xy/x只是某一些质数的乘积(指数都为1),当βi=0\beta_i=0时莫比乌斯函数贡献1(相当于没贡献),β=1\beta=1贡献1-1。综上,μ(x,y)=(1)k\mu(x,y)=(-1)^k,其中kky/xy/x质因数分解后不同质数的个数。即:

μ(x,y)={1\mboxifx=y;(1)k\mboxify/x\mboxistheproductofk\mboxdistinctprimes;0\mboxotherwise.\mu(x,y) = \begin{cases} 1 & \mbox{ if } x=y;\\ (-1)^k & \mbox{ if } y/x \mbox{ is the product of } k \mbox{ distinct primes};\\ 0 & \mbox{otherwise.} \end{cases}

结果表明,μ(x,y)\mu(x,y)只与y/xy/x有关,它实际上是一个一元函数。所以,我们也常常用μ(x)\mu(x)来简记μ(1,x)\mu(1,x),它们的值是相同的。

由此,我们就可以在研究整除性的领域尝试莫比乌斯反演(容斥原理)。

例如,数论中的欧拉函数φ(n)\varphi(n)定义为11n1n-1中与nn互质的数的个数(规定φ(0)=1\varphi(0)=1)。我们有一个重要的关系dnφ(d)=n\sum\limits_{d|n}\varphi(d)=n。这个结论可以通过真分数的约分来直观地理解:当nn取12时,所有的真分数112,,1112\dfrac{1}{12},\cdots,\dfrac{11}{12}约分后写作:

112,16,14,13,512,12,712,23,34,56,1112\dfrac{1}{12},\dfrac{1}{6},\dfrac{1}{4},\dfrac{1}{3},\dfrac{5}{12},\dfrac{1}{2},\dfrac{7}{12},\dfrac{2}{3},\dfrac{3}{4},\dfrac{5}{6},\dfrac{11}{12}

按分母归类:

12;13,23;14,34;16,56;112,512,712,1112\dfrac{1}{2};\dfrac{1}{3},\dfrac{2}{3};\dfrac{1}{4},\dfrac{3}{4};\dfrac{1}{6},\dfrac{5}{6};\dfrac{1}{12},\dfrac{5}{12},\dfrac{7}{12},\dfrac{11}{12}

由于真分数一定包括了所有与它互质的分子,而真分数的分母又取遍了所有nn的约数(分子至少可以取1),所以这就是dnφ(d)=n\sum\limits_{d|n}\varphi(d)=n这个关系的直接表达(还要加上φ(0)=1\varphi(0)=1)。

那么,dnφ(d)=n\sum\limits_{d|n}\varphi(d)=n用整除偏序集的语言来表达就写成I(y)=xyφ(x)I(y)=\sum\limits_{x \leq y}\varphi(x),其中函数II表示自身到自身的映射,I(x)=xI(x)=x。注意此时是我们刚才提到的不等号方向相反的情况,所以我们要写φ(x)=yxμ(y,x)I(y)\varphi(x)=\sum\limits_{y \leq x}\mu(y,x)I(y)。化简:φ(n)=dnμ(d,n)d\varphi(n)=\sum\limits_{d|n}\mu(d,n)d =dnμ(nd)d=\sum\limits_{d|n}\mu(\dfrac{n}{d})d

于是得到了欧拉函数的一个计算方法:

φ(n)=dnμ(nd)d\varphi(n)=\sum\limits_{d|n}\mu(\dfrac{n}{d})\cdot d

格(Lattice)

在树上我们有最近公共祖先的概念,在Hasse图上两个节点也有“公共祖先”,用偏序集来表示,x,yx,y的公共祖先uu满足xu,yux \leq u,y \leq u。只不过在偏序集里我们不称它为“祖先”而成为“上界”,这是序结构的看法。如果在所有uu里满足u0uu_0 \leq u恒成立的u0u_0就是最小上界,记为x\oryx \or y。同样的可以定义最大下界xyx \land y

如果偏序集里的任意两个元素x,yx,y存在唯一的最小上界和唯一的最小下界,就称这个偏序集为“格”(Lattice)。格是一种特殊的偏序集。我们来研究它的莫比乌斯函数有什么特殊的性质。

Weisner定理

对于一个格PP,设0^\hat{0}是其中的最小元素,1^\hat{1}是它的最大元素。那么对于任意的元素aa,我们找到所有满足x\ora=1^x \or a = \hat{1}的元素xx。Weisner定理指出,x\ora=1^μ(0^,x)=0\sum\limits_{x \or a = \hat{1}}\mu(\hat{0},x)=0。我们这样来证明:枚举所有的xx,而在后面乘上一个因子,使得这个因子只在x\ora=1^x\or a=\hat{1}时取1,否则取0。这个因子就是y(x\ora)μ(y,1^)\sum\limits_{y\geq(x \or a)}\mu(y,\hat{1})——如果x\ora=1^x \or a=\hat{1},那么yy只能取1^\hat{1},因此它就写成μ(1^,1^)=1\mu(\hat{1},\hat{1})=1;如果x\ora1^x \or a \neq \hat{1},即x\ora<1^x \or a < \hat{1},我们要说明这条链上的所有μ(y,1^)\mu(y,\hat{1})之和为0。这个事实其实和莫比乌斯函数定义中的xzyμ(x,z)=0\sum\limits_{x \leq z \leq y}\mu(x,z)=0是对称的,我们在定义莫比乌斯函数的时候是用“左逆”来求得,因此得到了所有与起点关联的函数值之和为0,如果我们用“右逆”再尝试一次就会发现所有与终点关联的函数值之和也是0了。于是这样就证明了恒等式x\ora=1^μ(0^,x)=x(μ(0^,x)y(x\ora)μ(y,1^))\sum\limits_{x \or a = \hat{1}}\mu(\hat{0},x)=\sum\limits_{x}\left(\mu(\hat{0},x)\cdot \sum\limits_{y \geq (x \or a)}\mu(y,\hat{1})\right),交换求和顺序可得ya(μ(y,1^)xyμ(0^,x))\sum\limits_{y \geq a}\left(\mu(y,\hat{1})\sum\limits_{x \leq y}\mu(\hat{0},x)\right)。而xyμ(0^,x)=0^xyμ(0^,x)\sum\limits_{x \leq y}\mu(\hat{0},x)=\sum\limits_{\hat{0} \leq x \leq y}\mu(\hat{0},x),根据莫比乌斯函数的定义它就等于0。这样我们就证明了Weisner定理。

Weisner定理为我们提供一个方便地归纳求解莫比乌斯函数的方法。对这个定理移项可以得到μ(0^,1^)=x\ora=1^,x1^μ(0^,x)\mu(\hat{0},\hat{1})=-\sum\limits_{x \or a=\hat{1},x \neq \hat{1}}\mu(\hat{0},x),因此我们只要计算出底下的莫比乌斯函数就可以由此推出顶部的莫比乌斯函数。比如,整数的整除关系的偏序集是格,最小上界就是最小公倍数,最大下界就是最小公倍数,那么我们就可以用归纳法重新求解数论莫比乌斯函数的表达式:首先对于素数ppμ(p)=μ(1)=1\mu(p)=-\mu(1)=-1。对于一般的nn,质因数分解为n=p1α1pkαkn=p_1^{\alpha_1}\cdots p_k^{\alpha_k}。我们将Weisner定理中的aa取为p1p_1,那么x\ora=1^μ(0^,x)=0=lcm(x,p1)=nμ(x)=0\sum\limits_{x \or a=\hat{1}}\mu(\hat{0},x)=0=\sum\limits_{lcm(x,p_1)=n}\mu(x)=0,即μ(n)=lcm(x,p1)=n,xnμ(x)\mu(n)=-\sum\limits_{lcm(x,p_1) =n,x \neq n}\mu(x)。如果α1>1\alpha_1>1,那么xx必须取nn才能使lcm(x,p1)=nlcm(x,p_1)=n,少了任何一个因子都不行,而xx又不能等于nn,所以直接得到μ(n)=0\mu(n)=0;否则α1=1\alpha_1=1,此时xx只能取n/p1n/p_1,少了别的任何一个因子都不行,因此μ(n)=μ(n/p1)\mu(n)=-\mu(n/p_1)。这样归纳下去,得到的结论和我们之前根据定义计算得到的数论莫比乌斯函数是一致的。

划分的莫比乌斯函数

考虑“划分”的偏序集:一种划分方案对应着偏序集里的一个元素,而如果划分π1\pi_1π2\pi_2的加细(在原来的基础上分得更细),就定义π1π2\pi_1 \leq \pi_2。简单起见,我们以整数集合[n][n]的划分为例。我们可以验证这个划分是一个格,合并就是上界,拆散就是下届。每个元素单独划分就是0^\hat{0},所有元素打包就是1^\hat{1}

求解μ(0^,1^)\mu(\hat{0},\hat{1})

莫比乌斯函数是被偏序关系决定的(Hasse图),我们发现,对于划分我们其实只关心待划分的元素个数,而不在意元素是什么。要计算任意两个划分的莫比乌斯函数μ(π1,π2)\mu(\pi_1,\pi_2),其实都可以还原到最简单的情形μ(0^,1^)\mu(\hat{0},\hat{1})——假如π2\pi_2中有多个集合,那么我们可以考虑每个集合内部的划分,这些划分都是μ(x,1^)\mu(x,\hat{1})的形式的,我们把这些莫比乌斯函数计算出来然后按照之前定义的“偏序集的乘法”把他们乘在一起就好了;而对于每个μ(x,1^)\mu(x,\hat{1}),我们的划分xx其实是若干个集合,在我们的考虑内没有必要更细了,因此每个集合其实就是一个元素,所以其实它就等于μ(0^,[k])\mu(\hat{0},[k])。(我们所说的“就是”,其实是通过构建一个同构的新偏序集,并且证明这两个偏序集上的莫比乌斯函数相等)

所以关键只要求出μ(0^,1^)\mu(\hat{0},\hat{1})。下面我们证明,μ(0^,1^)=(1)n1(n1)!\mu(\hat{0},\hat{1})=(-1)^{n-1}(n-1)!

归纳法。当n=1n=1时等于1,满足;当n2n \geq 2时,运用Weisner定理,取a={{1,2},{3},{4,},,{n}}a=\{\{1,2\},\{3\},\{4,\},\cdots,\{n\}\},即在0^\hat{0}的基础上将1,21,2合并。那么μ(0^,1^)=π\ora=1^,π1^μ(0^,π)\mu(\hat{0},\hat{1})=-\sum\limits_{\pi \or a =\hat{1},\pi \neq \hat{1}}\mu(\hat{0},\pi)。如果π\pi1,21,2分在了同一个集合,那么为了使它和aa合并后形成[n][n],如果π[n]\pi \neq [n]就一定不可能,因此1,21,2不能属于同一个集合;除了含1和含2的集合以外,不能有第三个集合,不然也无法合并成一个集合。综上我们发现,π\pi只能把元素分成两个集合S1,S2S_1,S_2,其中1S1,2S21 \in S_1,2 \in S_2。那么μ(0^,π)=μ(0^,{S1})μ(0^,{S2})\mu(\hat{0},\pi) = \mu(\hat{0},\{S_1\}) \cdot \mu(\hat{0},\{S_2\}),而由于我们是归纳法,这两个函数都已经得到了:μ(0^,{S1})=(1)S11(S11)!\mu(\hat{0},\{S_1\}) = (-1)^{|S_1|-1}(|S_1|-1)!μ(0^,{S2})=(1)S21(S21)!\mu(\hat{0},\{S_2\}) = (-1)^{|S_2|-1}(|S_2|-1)!。枚举所有可能的π\pi,这相当于对{3,,n}\{3,\cdots,n\}枚举子集TT,得到μ(0^,1^)\mu(\hat{0},\hat{1}) =Tμ(0^,{1,T})μ(0^,{2,TC})=k=0n2(n2k)(1)kk!(1)nk2(nk2)!=-\sum\limits_{T}\mu(\hat{0},\{1,T\})\mu(\hat{0},\{2,T^C\})=-\sum\limits_{k=0}^{n-2} \dbinom{n-2}{k}(-1)^{k}k!(-1)^{n-k-2}(n-k-2)! =k=0n2(n2)!k!(n2k)!(1)n1k!(nk2)!=(n1)(n2)!(1)n2=(1)n1(n1)!=\sum\limits_{k=0}^{n-2}\dfrac{(n-2)!}{k!(n-2-k)!}(-1)^{n-1}k!(n-k-2)!=(n-1)(n-2)!(-1)^{n-2}=(-1)^{n-1}(n-1)!

完全图的连通生成子图计数

来看用到划分的莫比乌斯函数的一个例子。我们很熟悉图的生成树,相应的也有“生成图”的概念。一个连通生成子图是指在原图里挑出一些边,使得这些边使得所有点连通。生成树当然是一个连通生成子图。现在我们保证原图是完全图(任意两个点之间都有边),想统计所有可能的连通生成子图的个数。

要应用划分的莫比乌斯函数的话,我们可以把图的连通性看作一种“划分”,每个连通块在划分中都被划在了同一个集合,不同的连通块就是不同的集合。于是对于划分π\pi,我们定义函数g(π)g(\pi)表示在划分π\pi下(连通块情况)的生成子图的个数,再定义f(π)=ππg(π)f(\pi) = \sum\limits_{\pi'\leq \pi}g(\pi'),表示所有在π\pi的基础上加细的所有连通情况下生成子图的个数之和——这是容易计算的,只要不取连通块之间的边,每个内部的边都可以乱选,所以假如π\pi写作{S1,,St}\{S_1,\cdots,S_t\},第ii个集合内有Si|S_i|个点,因此完全图里有(Si2)=Si(Si1)2\dbinom{|S_i|}{2}=\dfrac{|S_i|(|S_i|-1)}{2}条边,因此f(π)=i=1t2Si(Si1)2f(\pi) = \prod\limits_{i=1}^{t}2^{\frac{|S_i|(|S_i|-1)}{2}}

那么根据f(π)=ππg(π)f(\pi) = \sum\limits_{\pi'\leq \pi}g(\pi')莫比乌斯反演(注意又是不等号反过来的那种情况),得到g(π)=ππμ(π,π)f(π)g(\pi)=\sum\limits_{\pi' \leq \pi}\mu(\pi',\pi)f(\pi')。而莫比乌斯函数的求法我们已经通过“划分”的“格”得到了。

快速Zeta变换

我们回到最初定义莫比乌斯函数的矩阵,我们把这个矩阵写作了zeta函数ζ(x,y)=1[xy]\zeta(x,y)=\mathbb{1}[x \leq y]。对于给定的ff,计算ζf\zeta f的复杂度就是暴力做矩阵乘法(矩阵乘向量)的复杂度,为O((2n)2)=O(4n)O((2^n)^2)=O(4^n)

而我们知道ζ\zeta函数其实是在枚举子集,而我们所做的计算其实是在考虑每个子集的子集。子集可以用二进制来表示,那子集的子集就可以用三进制来表示,因此应当存在一个O(3n)O(3^n)的做法。这也并不困难,这个问题的优化就在于利用ζ\zeta的性质——上三角矩阵。因此对于大小为kk的子集(某一行),我们只需要遍历2k2^k个元素。由此可得总的复杂度为O(k=0n(nk)2k)=O((1+2)n)=O(3n)O(\sum\limits_{k=0}^{n}\dbinom{n}{k}2^k)=O((1+2)^n)=O(3^n)

还有更快的方法。我们对于矩阵ζ\zeta的某一行(记作01向量(x1,,xn)(x_1,\cdots,x_n)),我们是要寻找所有满足yixiy_i \geq x_i的向量yyf(y)f(y)并求和。我们可以动态规划来尝试解决这个问题:定义dp(k,x1,,xk,xk+1,,xn)dp(k,x_1,\cdots,x_k,x_{k+1},\cdots,x_n)表示对所有前kkxi\geq x_i而后nkn-k=xi=x_i的向量yy对应的f(y)f(y)求和。那么对于每个kk,如果xk=1x_k=1dp(k,x1,,xn)=dp(k1,x1,,xn)dp(k,x_1,\cdots,x_n)=dp(k-1,x_1,\cdots,x_{n});如果xk=0x_k=0,则在这基础上还要加上dp(k1,x1,,xk1,1,xk+1,,xn)dp(k-1,x_1,\cdots,x_{k-1},1,x_{k+1},\cdots,x_n)这一项。初始时对于所有xxk=0k=0时就是f(x)f(x)本身;而我们要的答案就是各个xxk=nk=n时的dp值。我们看到状态转移的复杂度是O(1)O(1)的,状态数为O(n2n)O(n \cdot 2^n),这就是时间复杂度了。这个方法就被成为“快速Zeta变换”。

快速莫比乌斯变换

快速Zeta变换完成的工作就是对所有二进制串xx求出了xyf(y)\sum\limits_{x \leq y}f(y),这里ζ\zeta函数被隐含在了对遍历的限制条件xyx \leq y中。对应的,快速莫比乌斯变换就是要对所有xx求出xyμ(x,y)f(y)\sum\limits_{x \leq y}\mu(x,y)f(y)

我们采用完全相同的动态规划方法:定义dp(k,x1,,xk,xk+1,,xn)dp(k,x_1,\cdots,x_k,x_{k+1},\cdots,x_n)表示对所有前kkxi\geq x_i而后nkn-k=xi=x_i的向量yy对应的μ(x,y)f(y)\mu(x,y)f(y)求和。那么对于每个kk,如果xk=1x_k=1dp(k,x1,,xn)=dp(k1,x1,,xn)dp(k,x_1,\cdots,x_n)=dp(k-1,x_1,\cdots,x_{n});如果xk=0x_k=0,则还要加上一项,但不能像Zeta变换一样加dp(k1,x1,,xk1,1,xk+1,,xn)dp(k-1,x_1,\cdots,x_{k-1},1,x_{k+1},\cdots,x_n)这一项,因为在这里xx变化了,而我们想要的μ(x,y)\mu(x,y)中的xx是原来的xx。所以想要用这个状态,对于每个yy都要必须除掉μ((x1,,xk1,1,xk+1,,xn),y)\mu((x_1,\cdots,x_{k-1},1,x_{k+1},\cdots,x_n),y),乘上μ((x1,,xn),y)\mu((x_1,\cdots,x_n),y)。对于子集的偏序集,我们导出过μ(x,y)=(1)k\mu(x,y)=(-1)^k,其中kkx,yx,y中不同位的个数。于是我们直接得到这两个莫比乌斯函数的比值为1-1——也就是说此时的状态转移与Zeta变换相比,把“加上多出来的一项”改为“减去”就好了,其他与快速Zeta变换完全一致。初始化时对于所有xxk=0k=0时也还是μ(x,x)f(x)=f(x)\mu(x,x)f(x)=f(x)本身。这称为“快速莫比乌斯变换”。

快速集合卷积

为了更好地看到“集合卷积”的意义,我们来看一个“q-着色”问题:用qq种颜色给图着色,要求同一条边两端颜色必须不同,求方案数。

着色问题其实是要求我们把图分成qq个独立集,每个独立集内的点染相同颜色,就得到了一个可行的方法。也就是我们要统计不同的独立集的选法的总数。如果定义一个“集合上的卷积”,就可以更清晰地描述“qq个独立集”这件事——

集合卷积(fg)(Z)(f * g)(Z)定义为XZf(X)g(ZX)\sum\limits_{X \subseteq Z} f(X)\cdot g(Z \setminus X)。于是对于图上的点集SS,我们定义一个函数f(S)f(S)当且仅当SS是独立集时返回1,否则返回0。所以一个“2-着色”的解就是(ff)(V)(f*f)(V),即对于所有把点分成两部分的划分,当且仅当它们都分别是独立集时产生贡献1。相应的,qq-着色问题的解就是(Sq)(V)(S^q)(V),做qq次卷积。

因此问题是,如何快速地计算集合卷积?我们有一个奇妙的方法,这个方法和用快速傅里叶变换计算多项式卷积有着精神上的相似性。或者说,“快速集合卷积”和“多项式卷积”都是某个更根本的东西的投影。在快速多项式卷积中,最关键的是我们把要做卷积的函数“变换”成了另一个函数,在这种变化下卷积被转化为了简单的乘法,而再通过逆变换我们由得到了这个函数的原始形态。由于“变换”的复杂度优于“卷积”的复杂度,因此我们得到了更高效的算法。快速集合卷积也是相似的,在这里“快速傅里叶变换”被我们的“快速Zeta变换”,而它的逆变换就是“快速莫比乌斯变换”。下面我们来证明这一点:

在证明之前,我们需要对我们要证明的对象进行一些细节上的修正:第一点是,我们需要修改集合卷积的定义,去掉“两个集合没有交集”这一条限制,定义“覆盖卷积”c*_c(fcg)(Z)=XY=Zf(X)g(Y)(f *_c g)(Z)=\sum\limits_{X \cup Y=Z}f(X)g(Y)。为了能够用覆盖卷积来表示集合卷积,我们修改函数f,gf,g的定义,定义fi(X)=1[X=i]f(X)f_i(X)=\mathbb{1}[|X|=i] \cdot f(X),也就是在原本函数上附加上一个限制大小的条件。这样我们就可以把原本的集合卷积写作XY=Z,XY=f(X)g(Y)\sum\limits_{X\cup Y=Z,X \cap Y=\varnothing} f(X)\cdot g(Y)写作i=0n(XY=Zfi(X)gni(Y))=i=0n(ficgni)(Z)\sum\limits\limits_{i=0}^{n}\left(\sum\limits_{X \cup Y=Z}f_i(X)g_{n-i}(Y)\right)=\sum\limits_{i=0}^{n}(f_i*_c g_{n-i})(Z),也即fg=i=0n(ficgni)f*g=\sum\limits_{i=0}^{n}(f_i *_c g_{n-i})。第二点是,要能够满足与傅里叶变换类似的性质,我们需要把ζ\zeta函数ζ(x,y)=1[xy]\zeta(x,y)=\mathbb{1}[x \leq y]的定义修改为ζ(x,y)=1[xy]\zeta(x,y)=\mathbb{1}[x \geq y]

这样我们就可以来证明“快速集合卷积”ζ(fcg)(Z)=ζf(Z)ζg(Z)\zeta(f *_c g)(Z)=\zeta f(Z)\cdot \zeta g(Z)了。(其中(Z)(Z)就代表当前考虑结果向量的某一行。)直接通过定义来验证即可:ζ(fcg)(Z)=YZ(fcg)(Y)\zeta(f *_c g)(Z)=\sum\limits_{Y \subseteq Z}(f *_c g)(Y),根据覆盖卷积的定义,=YZAB=Yf(A)g(B)=\sum\limits_{Y \subseteq Z}\sum\limits_{A \cup B=Y}f(A)g(B),这等价于(AB)Zf(A)f(B)\sum\limits_{(A \cup B) \subseteq Z}f(A)f(B),先枚举AA,在固定AA的前提下枚举BB,则等价于AZ(f(A)(BZg(B)))\sum\limits_{A \subseteq Z}\left(f(A)\cdot \left(\sum\limits_{B \subseteq Z}g(B)\right)\right),两者相互独立,因此直接写作(AZf(A))(BZg(B))\left(\sum\limits_{A \subseteq Z}f(A)\right)\left(\sum\limits_{B \subseteq Z}g(B)\right),而这就是与ζ\zeta函数相乘的定义,因此就是ζf(Z)ζg(Z)\zeta f(Z) \cdot \zeta g(Z)

这样我们就得到了一个快速解决qq-着色问题的算法:首先我们要预处理函数f(S)f(S)SS的取值有2n2^n个,对于每个取值我们只需要遍历每条边验证即可,并预处理限制了大小的函数fif_i,因此总复杂度不超过O(2npoly(n))O(2^n \cdot \text{poly}(n))。我们总共做O(q)O(q)次集合卷积,每次集合卷积需要O(n)O(n)转化为覆盖卷积,求解每个覆盖卷积需要进行两次快速Zeta变换,相乘后再用快速莫比乌斯变换转化为原来的函数。以上的每一个步骤都是不超过O(2npoly(n))O(2^n \cdot \text{poly}(n))的,因此最终复杂度就是O(2npoly(n))O(2^n \cdot \text{poly}(n))