反演初步

参考了刘汝佳老师《算法艺术与信息学竞赛》。

离散变换与反演

有些时候,我们所求解问题的答案可以表示成一个类似前缀和的形式:\(f(x)=\sum a_ig(i)\)

更多时候,\(g(x)\)是我们所需的答案,不易求出;而\(f(x)\)则可以通过另一种更好的方式求出来。如何根据\(f(x)=\sum a_ig(i)\)来推导出\(g(x)\)的解析式呢?这个反推的过程,我们可以叫做反演。我们用一个例子来具体说明。

我们已经用容斥原理得出了错排问题的答案,即在\(n\)个元素中的所有排列中,第\(i(1 \leq i \leq n)\)个元素不是\(i\)的排列数目\(D_n\)。现在我们来尝试用反演的方法。

我们反过来求:有且仅有\(k\)个元素处在正确位置的方案数为\(\dbinom{n}{k}D_{n-k}\),即剩余的\(n-k\)个元素不允许再排在原来的位置。

易知,所有排列里,一定存在\(0,1,\cdots,n\)个元素恰好排在其位置的方案。我们把他们加起来得到:
\[ P_n=n!=\sum_{k=0}^n \dbinom{n}{k}D_{n-k} \tag{*} \]
反演(解出\(D_n\))得到:
\[ D_n=n!\sum_{r=0}^n{(-1)^r \frac{1}{r!}} \tag{**} \]

为什么这样做是可行的呢?这是因为以下这个公式:
\[ \begin{aligned} & a_n=\sum_{k=0}^n \dbinom{n}{k}b_k \\ & b_n=\sum_{k=0}^n (-1)^{n-k}\dbinom{n}{k} a_k \end{aligned} \tag{1} \]

这个式子叫做所谓的二项式变换。我们不妨把\((*)\)带入\((1)\)式检验:
\[ \begin{aligned} & P_n=\sum_{k=0}^n \dbinom{n}{k}D_{n-k}=\sum_{k=0}^n\dbinom{n}{k}D_k \\ & D_n=\sum_{k=0}^n (-1)^{n-k}\dbinom{n}{k} P_k = \sum_{k=0}^n (-1)^{n-k}\dfrac{n!}{(n-k)!}=n!\sum_{k=0}^n(-1)^k\frac{1}{k!} \end{aligned} \]

事实上,不仅只有二项式可以这样变换。变换需要满足以下条件。

设有两个多项式簇\(p_k(x),q_k(x),k=0,1,2,\cdots,n\),其中多项式\(p_i , q_i\)均是\(i\)次的如果它们满足:
\[ \begin{cases} p_k(x)=\sum_{i=0}^k \alpha_{i,k}q_i(x) \\q_k(x)=\sum_{i=0}^k \beta_{i,k}p_i(x) \end{cases} (k=0,1,2,\cdots,n) \]
且系数满足以下正交性:$ \sum \alpha_{i,k}\beta_{k,j}= \delta_{j,k} = [j=k]$

则下列两式可以相互推导,即两式可逆
\[ \begin{cases} f(k)=\sum_{i=0}^k \alpha_{i,k} g(i) \\g(k)=\sum_{i=0}^k \beta_{i,k} f(i) \end{cases} \tag{S} \]

也就是说,只要选取了适当的系数\(\alpha_{i,j}\)\(\beta_{i,j}\),就可以进行反演。

这里张贴几个比较常见的反演公式:
二项式反演:
\[ \begin{cases} a_n=\sum_{k=0}^n \dbinom{n}{k} b_k \\b_n=\sum_{k=0}^n (-1)^{n-k}\dbinom{n}{k}a_k \end{cases} \tag{1} \]

\[ \begin{cases} a_n=\sum_{k=n}^\infty \dbinom{n}{k} b_k \\b_n=\sum_{k=n}^\infty (-1)^{n-k}\dbinom{n}{k} a_k \end{cases} \tag{2} \]
\[ \begin{cases} a_n=\sum_{k=0}^n \dbinom{n+p}{k+p} b_k \\b_n=\sum_{k=0}^n (-1)^{n-k}\dbinom{n+p}{k+p} a_k \end{cases} \tag{3} \]
\[ \begin{cases} a_n=\sum_{k=n}^\infty \dbinom{n+p}{k+p} b_k \\b_n=\sum_{k=n}^\infty (-1)^{n-k}\dbinom{n+p}{k+p} a_k \end{cases} \tag{4} \]
斯特林数反演:
\[ \begin{cases} a_n=\sum_{k=0}^n s(n,k) b_k \\ b_n=\sum_{k=0}^n S(n,k) a_k \end{cases} \tag{5} \]

这里的公式又叫序列反演,其本质上和函数的反演是差不多的。

这里只张贴\((1)\)式和\((5)\)的证明,其他的不多赘述。

Mobius 反演

有没有一种反演可以适用于更加通用的情况,而不必求所谓的系数呢?我们可以考虑莫比乌斯变换。

莫比乌斯反演适用于偏序关系的运算。莫比乌斯反演依赖于所谓的“偏序集”。如果一个非空集合\(X\)上存在一个关系 “\(\leq\)”,满足三个性质:

  • 自反。\(\forall a \in X , a \leq a\)
  • 反对称。如果对于两个不同元素\(a ,b\) 有$ a \leq b$ ,就一定不满足 \(b \leq a\)
  • 传递。如果对于三个不同元素\(a,b,c\)\(a\leq b,b \leq c\),则一定有\(a \leq c\)

我们就把\(X\)和这个关系\(\leq\) 一起叫做一个偏序集,记为\(<X,\leq>\)

注意,如果偏序集\(<X,\leq>\)中,任意两个元素\(a,b\)一定满足\(a\leq b\)\(b \leq a\),就把这个偏序集称为全序集,把\(\leq\)称为全序关系

我们高一接触过的“包含于”\(\subseteq\)就是一个典型的偏序关系,但它不是全序关系。不少老师曾经用\(\leq\)来类比\(\subseteq\),是有一定的道理的。常见的,\(<\mathbb{N},\leq>\)是一个全序集。

更近一步地,我们考虑所谓的局部有限偏序集。对于任何元素\(x,y \in X\),都只有有限个\(a\) 满足 \(x \leq a \leq y\),就称\(<X.\leq>\)是局部有限偏序集。终于,我们可以此用莫比乌斯反演了。在\(X\)上定义函数:
\[ \mu(x,y)= \begin{cases} 1 & x=y \\ -\sum\limits_{x \leq u < y} \mu(x,u) & x<y \\ 0 & else \end{cases} \]
我们有莫比乌斯反演定理:

\(f(x)\)\(g(x)\)\(X\)上的整数函数,则以下两式可逆:
\[ \begin{aligned} & f(x)=\sum_{0 \leq u \leq x} g(u) \\ & g(x)=\sum_{0 \leq u \leq x} \mu(u,x) f(u) \end{aligned} \]
其中\(0\)\(X\)上的最小元。

在比赛中,最为常用的就是定义在\(<\mathbb{Z}^{+},|>\)的莫比乌斯反演了。我们重点讲解这个。
按照定义,这个莫比乌斯反演写成:
\[ \begin{aligned} & f(x)=\sum_{1 | d || x} g(d) \\ & g(x)=\sum_{1 | d || x} \mu(d,x) f(d) \end{aligned} \]

定义莫比乌斯函数:
\[ \mu(x,y)= \begin{cases} 1 & x=y \\ -\sum\limits_{x | u || y} \mu(x,u) & x||y \\ 0 & else \end{cases} \]

为了方便表达,我们定义\(x || y\)叫做“严格整除”,即\(x || y \iff x|y ,x \neq y\)

我们尝试推一下这个函数的解析式。下面先固定\(x=1\)以方便求解。这一段都是无聊的推导,可以跳过。


易知,\(\mu(1,1)=1\)。当\(p\)是质数时,\(\mu(1,p)=-\mu(1,1)=-1\)
两个不同质数的积\(p_1p_2\)有:\(\mu(1,p_1p_2)=-\mu(1,1)-\mu(1,p_1)-\mu(1,p_2)=-1+1+1=1\)
三个不同质数:\(\mu(1,p_1p_2p_3)=-\mu(1,1)-\mu(1,p_1)-\mu(1,p_2)-\mu(1,p_3)-\mu(1,p_1p_2)-\mu(1,p_2p_3)-\mu(1,p_1p_3)=-1+1+1+1-1-1-1=-1\)
有没有一点容斥原理的味道了?我们推测对于奇数个质数积有\(\mu=-1\),反之\(\mu=1\)
对于\(k\)个不同的质数,我们有:
\[ \begin{aligned} \mu(1,p_1\cdots p_k)&= -\mu(1,1)- \sum_{i=1}^k \mu(1,p_i) - \sum_{1 \leq i_1 < i_2 \leq k}\mu(1,p_{i_1}p_{i_2})- \cdots \\ & = -\sum_{i=0}^{k-1}(-1)^{i}\dbinom{k}{i} \\ & = -\sum_{i=0}^{k}(-1)^{i}\dbinom{k}{i} + (-1)^k \dbinom{k}{k} \\ & = (-1)^{k} \end{aligned} \]
这和我们的猜想完全一致。利用数学归纳法,我们就可以得到计算公式了。

但是,在上面的情况中,如果有部分质数相等,那么函数就会重复计算。

考虑计算\(\mu(1,P^s)\)\(\mu(1,P^s)=-\sum_{i=0}^{s-1}\mu(1,P^i)\)

其中\(\mu(1,1)=1,\mu(1,P)=-1,\mu(1,P^2)=-1+1=0,\mu(1,P^3)=-\mu(1,1)-\mu(1,P)-\mu(1,P^2)=0 \cdots\)

不难发现,当\(s\geq 2\)时,恒有\(\mu(1,P^s)=0\)

那么带上一个质数继续推导:
\(\mu(1,p_1P^2)=-\sum_{i=0}^2 \mu(1,P^i) - \mu(1,p_1) - \mu(1,p_1P) = 0\)
\(\mu(1,p_1P^3)=-\sum_{i=0}^3 \mu(1,p_i) - \mu(1,p_1) - \mu(1,p_1P) - \mu(1,p_1P^2) = 0\)
$ \vdots$
不难推出,$\mu(1,p_1P^s)(s \geq 2) =0 $。

如果带上两个不同的质数也是同理:

\(\mu(1,p_1p_2P^2)=-\sum_{i=0}^2 \mu(1,P^i) - \mu(1,p_1)-\mu(1,p_1P)-\mu(1,p_1P^2) -\mu(1,p_2)-\mu(1,p_2P)- \cdots\)
\(= 0-0-0- \mu(1,p_1p_2) -\mu(1,p_1p_2P) = 0\)

用这样的方法依次带入三个质数,四个质数,多个质数,然后疯狂地运用数学归纳法,发现当有重复的质数出现时,\(\mu=0\)。(其实是我真的不想再证下去了...)

综上,我们得到了其中一个部分的函数表达式:
\[ \mu(1,n)= \begin{cases} 1 & n=1 \\ (-1)^k & n=p_1\cdots p_k \\ 0 & else \end{cases} \]

考虑\(\mu(x,y)\)的计算。是否有\(\mu(x,y)=\mu(1,\frac{y}{x})\)呢?

这里可以感性地理解一下。当\(x=y\)时,显然成立。

\(x || y\)时,我们注意到 $\mu(x,y)=-\sum_{x | d || y} \mu(x,u) $。比对 \(\mu(1,\frac{y}{x}) = -\sum_{1 | d || \frac{y}{x}} \mu(1,d)\) ,这里的求和变量 \(d\) 的合法个数是相同的。也就是说,满足 \(x | d || y\)\(d\) 的个数和 \(d || \frac{y}{x}\) 是相同的。而如果我们把这个递归的式子全部展开,那么答案就是若干个\(-1,1,0\)的和。而由于\(d\)的数量是相同的,最终展开得到的\(-1,1,0\)的个数也是相同的,答案应该也是相同的。

我们就暂定认为\(\mu(x,y)=\mu(1,\frac{y}{x})\),简记为\(\mu(\frac{y}{x})\)


最后反演的表达式:
\[ \begin{aligned} & f(x)=\sum_{d | x} g(d) \\ & g(x)=\sum_{d | x} \mu(\frac{x}{d}) f(d) \end{aligned} \]

其中莫比乌斯函数:
\[ \mu(n)= \begin{cases} 1 & n=1 \\ (-1)^k & n=p_1\cdots p_k \\ 0 & else \end{cases} \]

我们再试一下其他的偏序集:对幂集(子集)的偏序集\(<P(S),\subseteq>\)上的Mobius反演:
定义:
\[ \mu(B,A) = \begin{cases} (-1)^{|A|-|B|} & B \subseteq A \\ 0 & else \end{cases} \]
则以下两式可逆:
\[ \begin{aligned} & f(A)=\sum_{H \subseteq A} g(H) \\ & g(B)=\sum_{H \subseteq B} (-1)^{|B|-|H|}f(H) \end{aligned} \]

猜你喜欢

转载自www.cnblogs.com/LinearODE/p/10719164.html
0条评论
添加一条新回复