$$ \require{physics} \require{mathtools} \def\*#1{\mathbf{#1}} \def\+#1{\mathcal{#1}} \def\-#1{\mathrm{#1}}\def\^#1{\mathbb{#1}}\def\!#1{\mathtt{#1}} \def\@#1{\mathscr{#1}} \newcommand{\norm}[1]{\left\Vert#1\right\Vert} \newcommand{\set}[1]{\left\{\,#1\,\right\}} \newcommand{\tp}[1]{\left(#1\right)} \newcommand{\eps}{\varepsilon} \newcommand{\inner}[2]{\langle #1,#2\rangle} \renewcommand{\mid}{\;\middle\vert\;} \newcommand{\cmid}{\,:\,} \newcommand{\numP}{\#\mathbf{P}} \renewcommand{\P}{\mathbf{P}} \newcommand{\defeq}{\triangleq} \newcommand{\ol}{\overline} \newcommand{\Pr}[2][]{\mathbf{Pr}_{#1}\left[#2\right]} \newcommand{\E}[2][]{\mathbf{E}_{#1}\left[#2\right]} \newcommand{\Var}[2][]{\mathbf{Var}_{#1}\left[#2\right]} \renewcommand{\emptyset}{\varnothing} \renewcommand{\d}{\dd} \newcommand{\mle}{\preceq} \newcommand{\mge}{\succeq} \newcommand{\DKL}[2]{D_{\!{KL}}\tp{#1\,\|\,#2}} \newcommand{\DTV}[2]{D_{\!{TV}}\tp{#1\,\|\,#2}} \newcommand{\argmin}{\mathop{\arg\min}} \newcommand{\argmax}{\mathop{\arg\max}} \newcommand{\eps}{\varepsilon} \newcommand{\wh}{\widehat} \def\multiset#1#2{\left(\kern-.2em\left(\genfrac{}{}{0pt}{}{#1}{#2}\right)\kern-.2em\right)} % define stirling number \newcommand{\genstirlingI}[3]{% \genfrac{[}{]}{0pt}{#1}{#2}{#3}% } \newcommand{\genstirlingII}[3]{% \genfrac{\{}{\}}{0pt}{#1}{#2}{#3}% } \newcommand{\stirlingI}[2]{\genstirlingI{}{#1}{#2}} \newcommand{\dstirlingI}[2]{\genstirlingI{0}{#1}{#2}} \newcommand{\tstirlingI}[2]{\genstirlingI{1}{#1}{#2}} \newcommand{\stirlingII}[2]{\genstirlingII{}{#1}{#2}} \newcommand{\dstirlingII}[2]{\genstirlingII{0}{#1}{#2}} \newcommand{\tstirlingII}[2]{\genstirlingII{1}{#1}{#2}} % end of defining stirling number $$

第七讲:莫比乌斯反演 II

Published

April 10, 2023

格(Lattice)

我们将介绍格(Lattice)这样一种特殊的偏序集。格具有一些特殊的性质,可以方便我们来计算莫比乌斯函数。

\(\+P=(P,\le)\) 为一个偏序集。给定 \(x,y\in P\),如果元素 \(u\) 满足 \(x\le u\) 并且 \(y\le u\),则称 \(u\)\(x\)\(y\) 的上界。我们说 \(x\)\(y\) 的一个上界 \(u^*\)最小上界,当且仅当对于 \(x\)\(y\) 的任意一个上界 \(u\),都有 \(u^*\le u\)。显然,如果 \(x\)\(y\) 存在最小上界,那么它是唯一的。我们把它记做 \(x\lor y\),读作 \(x\)\(y\) (join of \(x\) and \(y\))。我们同样可以定义 \(x\)\(y\)最大下界,记做 \(x\land y\),读作 \(x\)\(y\) (meet of \(x\) and \(y\))。

一个偏序集 \((P,\le)\) 被称为格(Lattice),当且仅当对于任意的 \(x,y\in P\)\(x\land y\)\(x\lor y\) 都存在。

Weisner 定理

Theorem 1 \(\+P=(P,\le)\) 是一个格,\(\wh 0\)\(\wh 1\) 分别是其最小与最大元素,\(\mu\) 是其莫比乌斯函数。则对于任意 \(a>\wh 0\)\[ \sum_{x\colon x \lor a = \hat 1} \mu(\wh 0,x) = 0. \tag{1}\]

Proof. \[ \sum_{x\colon x\lor a=\wh 1} \mu(0,x) = \sum_{x\in P}\mu(0,x)\cdot \sum_{y\ge x\lor a} \mu(y,1) = \sum_{y\ge a} \mu(y,\wh 1)\cdot\sum_{x\le y}\mu(0,x)=0. \]

这个看起来平平无奇的等式可以方便我们计算一个格的莫比乌斯函数

数论莫比乌斯函数

我们使用 Weisner 定理来再次计算数论莫比乌斯函数。我们上节课已经知道,对于任意 \(n\in\^N\)\[ \mu(n) = \mu(1,n) = \begin{cases} (-1)^k & \mbox{ if } n=p_1\dots p_k \mbox{ is the product of }k\mbox{ distinct primes};\\ 0 & \mbox{otherwise.} \end{cases} \]

我们使用归纳法,结合 Weisner 定理来给出一个新的证明。归纳起始是当 \(n=p\) 是一个素数的时候。这个时候根据 Equation 1 ,有 \[ \mu(1) + \mu(n) = 0 \iff \mu(n) = -1. \]

\(n = p_1^{\alpha_1} p_2^{\alpha_2}\cdots p_m^{\alpha_m}\) 为其素分解,其中每一个 \(\alpha_i\ge 1\)。我们令 Theorem 1 中的 \(a\)\(p_1\)。由于对于两个整数 \(x,y\)\(x\lor y\) 实际上是他们的最小公倍数 \(\!{lcm}(x,y)\),我们可以把 Equation 1 写成 \[ \sum_{x\colon \!{lcm}(x,p_1)=n}\mu(k) = 0 \iff \mu(n) = -\sum_{x\colon\substack{\!{lcm}(x,p_1)=n\\x\ne n}}\mu(x) \] 我们来考察哪些 \(x\) 满足 \(\!{lcm}(x,p) = n\)。首先,\(x\) 肯定不包括除了 \(p_1,\dots,p_m\) 之外的素因子。因此可以假设 \(x = p_1^{\beta_1}\cdots p_m^{\beta_m}\)。容易发现,对于任意 \(i\ge 2\)\(\beta_i = \alpha_2\)。如果 \(\alpha_1>1\),那么 \(\beta_1=\alpha_1\)。如果\(\alpha_1 = 1\),那么\(\beta=0\)\(\beta=1\)。因此,我们可以得到,如果 \(\alpha_1>1\),那么满足 \(\!{lcm}(x,p_1)=n\)\(x\) 只有 \(x=n\),因此 \(\mu(n) = 0\),否则, \[ \mu(n) = - \mu(n / p_1). \] 使用归纳假设即得证。

划分的莫比乌斯函数

给定一个集合 \(U\),它的一个分划指的是一些非交集合 \(\pi=\set{S_1,S_2,\dots,S_m}\) 满足 \(\bigcup_{i\in [m]} S_i = U\)。我们用 \(\Pi_U\) 来表示 \(U\) 的所有分划的集合。可以定义 \(\Pi_U\) 上的一个二元关系 \(\le\),满足 \(\pi_1\le \pi_2\) 当且仅当 \(\pi_2\) 中的任何一个集合 \(S\),都可以写成 \(\pi_1\) 中若干集合的并集。直观上来说,\(\pi_1\) 相对于 \(\pi_2\)\(U\) 分得更了。我们也称 \(\pi_1\)\(\pi_2\) 的一个精细化(refining),或者说 \(\pi_2\)\(\pi_1\) 的一个粗略化(coarsening)

我们假设 \(U=[n]\),并把 \(\Pi_U\) 写成 \(\Pi_n\)。容易验证 \((\Pi_n, \le)\) 是一个偏序集,并且是一个格。它的极小元素 \(\wh 0 = \set{\set{1},\set{2},\dots,\set{\abs{n}}}\),最大元素 \(\wh 1 = \set{[n]}\) 我们来计算它的莫比乌斯函数。

实际上,如果 \(\pi_1\le \pi_2\),我们可以把 \(\pi_1\) 中的每一个集合看成一个单独的元素,从而把 \(\pi_2\) 看成对这些单独元素的分划。因此,只需计算 \(\mu(\hat 0,\pi)\) 就够了。另一方面,给定一个分划 \(\pi=\set{S_1,\dots,S_m}\),我们有 \(\mu(\hat 0,\pi) = \prod_{i=1}^m \mu(\hat 0, \set{S_i})\) (上节课讲过,偏序乘积的莫比乌斯函数是对应偏序的莫比乌斯函数的乘积)。所以,我们只需要计算 \(\mu(\wh 0,\wh 1)\),就可以得到所有的 \(\mu(\pi_1,\pi_2)\)

Theorem 2 对于偏序集 \((\Pi_n,\le)\)\(\mu(\wh 0,\wh 1) = (-1)^{n-1}(n-1)!\)

Proof. 我们对 \(n\) 进行归纳。\(n=1\) 的时候定理是显然成立的。现在假设 \(n\ge 2\)。由于 \(\hat 0 = \set{\set{1},\set{2},\dots,\set{n}}\) 是最细的分划。我们在 Weisner 定理中取 \(a=\set{\set{1,2},\set{3},\set{4},\dots,\set{n}}\),即把 \(1, 2\) 分在一个集合里的分划,那么显然 \(\wh 0\le a\)

根据 Weisner 定理, \[ \mu(\wh 0,\wh 1) = -\sum_{\pi:\substack{\pi\lor a = \wh 1\\ \pi\ne \wh 1}}\mu(\wh 0,\pi). \] 我们现在来考察哪些 \(\pi\) 能够满足 \(\pi\lor a=\wh 1=\set{[n]}\) 并且 \(\pi\ne \wh 1\)。简单的思考之后就会发现,\(\pi\) 一定是把 \([n]\) 分成了两个部分,即 \(\pi=\set{S_1,S_2}\),且 \(1\in S_1\)\(2\in S_2\)。而对于这样的 \(\pi\),我们有 \(\mu(\wh 0,\pi) = \mu(\wh 0,\set{S_1})\cdot \mu(\wh 0,\set{S_2})\),从而可以使用归纳假设进行计算。

因此,我们可以枚举所有这样的 \(\pi\)。这等价于枚举所有的 \(T\subseteq \set{3,4,\dots,n}\)\[ \begin{align*} \mu(\wh 0,\wh 1) &= -\sum_{\pi:\substack{\pi\lor a = \wh 1\\ \pi\ne \wh 1}}\mu(0,\pi)\\ &=-\sum_{T\subseteq \set{3,4,\dots,n}} \mu(\wh 0, \set{T\cup\set{1},\ol T\cup \set{2}})\\ &=-\sum_{k=0}^{n-2}\binom{n-2}{k}(-1)^{k}k! (-1)^{n-k-2}(n-k-2)!\\ &=(-1)^{n-1}(n-1)! \end{align*} \]

我们来考虑分划的莫比乌斯变换的一个应用:给定一个 \(n\) 个顶点的完全图 \(K_n\),它总共有多少个连通的生成子图?换句话说,我们希望计算给定一个顶点集 \(V\),计算有多少个边集 \(E\subseteq V\times V\),使得图 \(G=(V,E)\) 是连通图。

现在固定 \(V=[n]\)。我们实际上来计算一个更一般的函数,即给定 \([n]\) 的一个分划 \(\pi\)\(g(\pi)\) 表示有多少个 \(E\subseteq V\times V\),使得 \((V,E)\) 里面的连通块正好对应于 \(\pi\) 里的分划。我们原来的问题便是求 \(g(\wh 1)\) 的值。我们用 \(\pi_E\) 来表示 \((V,E)\) 的连通块所诱导出来的分划。考虑函数 \(f(\pi)\defeq \sum_{\pi'\le \pi} g(\pi')\),即 \(f(\pi)\) 表示的是满足诱导出来的连通块是 \(\pi\) 的细化的那些生成子图的个数。换句话说,如果边集 \(E'\) 满足 \(\pi_{E'}\le \pi\),则其在 \(f(\pi)\) 里贡献 \(1\)

实际上,\(f(\pi)\) 是很容易计算的,因为我们只需要枚举 \(\pi\) 所定义的每个连通块里面的边。假设 \(\pi=\set{S_1,\dots,S_t}\),且对于 \(i\in [t]\)\(\abs{S_i}=m_i\)。那么 \[ f(\pi) = \prod_{i=1}^m 2^{\binom{m_i}{2}}. \] 我们只需要再使用莫比乌斯反演,便可以得到 \[ g(\pi) = \sum_{\pi'\le \pi}\mu(\pi',\pi) f(\pi'), \] 其中 \(\mu(\cdot,\cdot)\) 是我们已经计算过的分划格上的莫比乌斯函数。

快速莫比乌斯 / zeta 变换

\(2^n\cdot \-{poly}(n)\) 时间内进行 zeta 变换

考虑偏序集合 \(\tp{P=2^{[n]},\subseteq}\) 和函数 \(f\colon P\to\^R\)。函数 \(f\)\(\zeta\) 变换是\(\zeta f\in\^R^{2^n}\)。我们如何高效计算 \(\zeta f\) 这个长度为 \(2^n\) 的向量的值?

最简单的方法是按照定义直接计算。也就是说,我们对每个 \(X\subseteq [n]\) 分别按照定义计算 \((\zeta f)(X)\)。按照这种方法,对于每个 \(X\) 最多需要花费 \(O(2^n)\) 的时间。粗略的计算,总共需要 \(O(2^n\cdot 2^n) = O(4^n)\) 的时间。

实际上,我们可以算的更仔细一点。对于一个具体的 \(X\),总共有 \(2^{n-|X|}\)\(Y\) 使得 \(Y\geq X\)。因此,计算 \(\sum_{Y\colon Y\geq X}f(Y)\) 需要 \(2^{n-|X|}\) 次操作。总时间代价是 \[ \sum_{X\subseteq[n]}O(2^{n-|X|})=O(\sum_{i=0}^n\binom{n}{i}2^i)=O(3^n). \]

我们可以使用动态规划来加速计算。将每个集合 \(X\) 视为二进制向量\(x=\tp{x_1,x_2,\dots,x_n}\),其中\(x_i=\*1[i\in X]\)。设

\[ G(x)=(\zeta f)(X)=\sum_{y\in \{ 0,1\}^n}\*1[y_1\geq x_1, y_2\geq x_2,\cdots,y_n\geq x_n]f(y). \] 对于每一个 \(j\in \set{0,1,\dots,n}\),定义 \[ G_j(x)\triangleq \sum_{y\in \{ 0,1\}^j}\*1[y_1\geq x_1, y_2\geq x_2,\cdots,y_j\geq x_j]f(y_1,y_2,\dots,y_j,x_{j+1},x_{j+2},x_n). \]

则我们有 \(G_n(x)=G(x)\)\(G_0(x)=f(x)\)。注意到 \[ G_j(x_1,x_2,\dots,x_n)= \begin{cases} G_{j-1}(x_1,x_2,\dots,x_n), & x_j=1\\ G_{j-1}(x_1,x_2,\dots,x_{j-1},0,x_{j+1},\dots,x_n)\\ \quad+ G_{j-1}(x_1,x_2,\dots,x_{j-1},1,x_{j+1},\dots,x_n) & x_j=0 \end{cases}. \]

我们可以从子结果 \(G_{i-1}(x)\) 中用 \(O(1)\) 的时间计算每个 \(G_j(x)\),从而在多项式时间内得到 \(G(x)\)。动态规划的总时间代价是\(2^n\cdot \-{poly}(n)\)

我们也可以用类似的方法计算莫比乌斯变换(练习)。

快速集合卷积

我们来研究快速莫比乌斯 / zeta 变换的一个应用。考虑 \(q\)-着色问题:给定一个图\(G=(V,E)\)\(G\) 上的一个合法着色指的是对每个顶点使用 \(q\) 种颜色中的一种进行着色,同时保证相邻的顶点没有相同的颜色。我们希望来计算 \(G\) 上的合法着色的个数。按照定义枚举所有可能的着色方案需要 \(\Omega(q^n)\) 的时间。一个不错的算法习题是使用动态规划算法来设计一个 \(O(3^n)\) 的算法。

我们将介绍一种基于 zeta 变换的优美算法来在 \(O(2^n)\) 的时间内同时计算出 \(G\) 及其每一个诱导子图中的合法着色的数量。

第一个观察是每一个合法着色对应了对 \(V\) 的一个分划,并且每一个分块在原图中是一个独立集。定义独立集的指标函数 \(S\colon 2^V\to\set{0,1}\)\(S(X)=\^1[X \mbox{ 是独立集}]\)。于是,\(G[X]\) 中合法着色的个数为1

  • 1 两个函数\(f,g\colon 2^{[n]}\to \^R\)的卷积定义为\(\tp{f*g}(Z)\triangleq\sum_{X\subseteq Z}f(X)g\tp{Z\setminus X}.\)

  • \[ \tp{\underbrace{S*S*S*\cdots *S}_{q\ \-{terms}}}[X]. \] 因此,计算合法着色数的问题可以转变成计算集合函数的卷积。

    我们引入了一个辅助操作 \(*_c\),称为覆盖卷积\[ \tp{f*_cg}(Z)=\sum_{X\cup Y= Z}f(X)g(Y). \]

    计算两个函数的卷积可以约化为计算限制大小的函数上的覆盖卷积。对于每个\(i\in\^N\),令 \(f_i(X)=\^1[|X|=i]f(X)\) 为函数 \(f\) 限制在只允许大小为 \(i\) 的输入后的函数。于是就有 \[ \tp{f*g}(Z)=\sum_{X\cup Y= Z,X\cap Y=\emptyset}f(X)g(Y)=\sum_{i=0}^n \tp{f_i*_c g_{n-i}}(Z). \]

    因此,如果对于每个 \(i\)\(\tp{f_i *_c g_{n-i}}(Z)\) 都是已知的,则我们可以在多项式时间内计算 \(\tp{f*g}(Z)\)。考虑偏序集 \(\tp{2^{[n]},\leq}\),其中 \(X\leq Y\) 当且仅当\(Y\subseteq X\) 2。下面定理说明,对于集合函数,zeta 变换类似于分析中的傅立叶变换。

  • 2 为了让我们的讨论更加简洁,这里我们反转了一下\(\le\)的定义,即 \(\le = \supseteq\) 而不是一般的 \(\subseteq\)!

  • Theorem 3 \(\zeta \tp{f* _{c} g}(Z)=\zeta f(Z)\cdot \zeta g(Z)\).

    Proof. \[\begin{align*} \zeta (f* _{c} g)(Z) &= \sum_{Y\subseteq Z}(f* _{c} g)(Y) = \sum_{Y\subseteq Z} \sum_{A\cup B=Y} f(A)\cdot g(B)\\ &= \sum_{A\cup B\subseteq Y}f(A)\cdot g(B)=\sum_{A\subseteq Z} f(A)\cdot \tp{\sum_{B\subseteq Z} g(B)}\\ &=\zeta f(Z)\cdot \zeta g(Z). \end{align*}\]

    有了 Theorem 3 之后,我们可以通过分别计算 \(f\)\(g\) 的 zeta 变换从而在 \(2^n\cdot \-{poly}(n)\) 的时间内计算 \(\zeta (f* _{c} g)\)。 然后,我们再用 \(2^n\cdot\-{poly}(n)\) 的时间计算 \(\zeta (f* _{c} g)\) 的莫比乌斯变换得到 \(f*_c g\),从而得到 \(f*g\)。这样,我们便得到了一个计算顶点数为 \(n\) 的图的 \(q\)-合法着色个数的 \(O(2^n)\) 时间的算法。