Loading

关于离散卷积的结合律

关于卷积的结合律

其结合律与矩阵乘法类似。

下文中 \(f_{i,*}\) 表示卷积 \(i\) 次后的结果。


\((+,\times)\) 卷积

即多项式乘法,这个结合律显然,处理的时候既可以直接使用标准的多项式快速幂,也可以倍增。

\[已知:f_{i,j}=\sum_k f_{i-1,k}\times f_{1,j-k}\\ 有结论:f_{x+y,j}=\sum_k f_{x,k}\times f_{y,j-k} \]

这个由多项式乘法证明显然。


\((\min,+)\) 卷积,\((\max,+)\) 卷积

这里以 \((\min,+)\) 卷积为例。

\[已知:f_{i,j}=\min_k \{f_{i-1,k}+f_{i-1,j-k}\}\\ 有结论:f_{x+y,j}=\min_k\{f_{x,k}+f_{y,j-k}\} \]

可以用数学归纳法证明:

对于一个 \(x\) 假设 \(y=k\) 是成立现在要证明 \(y=k+1\) 时成立:

\[\begin{aligned} f_{x+k+1,j}&=\min\limits_o\{f_{x+k,o}+f_{1,j-o}\}\\ &=\min\limits_o\{\min\limits_p\{f_{x,p}+f_{k,o-p}\}+f_{1,j-o}\}\\ &=\min\limits_p\{f_{x,p}+\min\limits_o\{f_{k,o-p}+f_{1,j-o}\}\}\\ &=\min\limits_p\{f_{x,p}+f_{k+1,j-p}\} \end{aligned} \]

所以 \(y=k+1\) 的时候也成立,而 \(y=1\) 时显然成立,所以原命题成立。

这以上这三种卷积其实是利用了 \((*,\cdot)\)\((a*b)\cdot c=(a\cdot c)*(b\cdot c)\) 的分配律证明。


迪利克雷卷积

\[已知:f_{i,j}=\sum_{k|j}f_{i-1,k}\times f_{1,\frac jk}\\ 有结论:f_{x+y,j}=\sum_{k|j}f_{x,k}\times f_{y,\frac jk} \]

证明与上文类似,用数学归纳法可以解决。

对于一个 \(x\) 假设 \(y=k\) 是成立现在要证明 \(y=k+1\) 时成立:

\[\begin{aligned} f_{x+k+1,j}&=\sum_{o|j}f_{x+k,o}\times f_{1,\frac jo}\\ &=\sum_{o|j}(\sum_{p|o}f_{x,p}\times f_{k,\frac op})\times f_{1,\frac jo}\\ &=\sum_{p|j}f_{x,p}(\sum_{t|\frac jp}f_{k,t}f_{1,\frac j{pt}})\\ &=\sum_{p|j}f_{x,p}\times f_{k+1,\frac jp}\\ \end{aligned} \]

所以 \(y=k+1\) 的时候也成立,而 \(y=1\) 时显然成立,所以原命题成立。

同理我们可以得到 \((\min,+)\),\((\max,+)\) 版的迪利克雷卷积,这里以 \((\min,+)\) 为例:

\[已知:f_{i,j}=\min_{k|j}\{f_{i-1,k}+f_{1,\frac jk}\}\\ 有结论:f_{x+y,j}=\min_{k|j}\{f_{x,k}+f_{y,\frac jk}\} \]

证明与上文类似,这里不再赘述。


子集卷积

\[已知:f_{i,S}=\sum_{T\subseteq S} f_{i-1,T}\times f_{1,S\setminus T}\\ 有结论:f_{x+y,S}=\sum_{T\subseteq S}f_{x,T}\times f_{y,S\setminus T} \]

证明与上文类似,用数学归纳法可以解决。

对于一个 \(x\) 假设 \(y=k\) 是成立现在要证明 \(y=k+1\) 时成立:

\[\begin{aligned} f_{x+k+1,S}&=\sum_{T\subseteq S} f_{x+k,T}\times f_{1,S\setminus T}\\ &=\sum_{T\subseteq S} (\sum_{V\subseteq T}f_{x,V}\times f_{k,T\setminus V})\times f_{1,S\setminus T}\\ &=\sum_{V\subseteq S} f_{x,V}\times f_{k+1,S\setminus V}\\ \end{aligned} \]

所以 \(y=k+1\) 的时候也成立,而 \(y=1\) 时显然成立,所以原命题成立。

同理我们可以得到 \((\min,+)\),\((\max,+)\) 版的子集卷积,这里以 \((\min,+)\) 为例:

\[已知:f_{i,S}=\min_{T\subseteq S}\{ f_{i-1,T}+f_{1,S\setminus T}\}\\ 有结论:f_{x+y,S}=\min_{T\subseteq S}\{f_{x,T}+f_{y,S\setminus T}\} \]

证明与上文类似,这里不再赘述。


变式

然而很多时候遇到的 dp 式虽然形如卷积却又不严格规范,这时我们应该运用证明方法进行探究。现在举个例子(来自“[省选联考 2024] 虫洞”):

\[已知:f_{1,*}=1,f_{i,j}=\sum_{x|j}\frac{f_{i-1,x}}{x} \]

我们去探索上文的结合律表达式,首先推导一个 \(x\to x+2\) 的表达式。

\[\begin{aligned} f_{i+2,j}=&\sum_{x|j}\frac {f_{i+1,x}}{x}\\ =&\sum_{x|j}\sum_{y|x}\frac{f_{i,y}}{xy}\\ =&\sum_{y|x}\frac{f_{i,y}}{y^2}\sum_{x|\frac jy}\frac 1x\\ =&\sum_{y|j}\frac{f_{i,y}f_{2,\frac iy}}{y^2} \end{aligned} \]

于是我们猜测有表达式。

\[f_{x+y,j}=\sum_{k|j}\frac{f_{x,k}f_{y,\frac jk}}{k^y} \]

现在用数学归纳法进行证明。

对于一个 \(x\) 假设 \(y=k\) 是成立现在要证明 \(y=k+1\) 时成立:

\[\begin{aligned} f_{x+k+1,j}&=\sum_{o|j}\frac{f_{x+k,o}}{o}\\ &=\sum_{o|j}\frac{\sum_{p|o}\frac{f_{x,p}f_{k,\frac op}}{p^k}}{o}\\ &=\sum_{p|j}\frac{f_{x,p}}{p^{k+1}}\sum_{p|o,o|j}\frac{f_{k,\frac op}}{\frac op}\\ &=\sum_{p|j}\frac{f_{x,p}f_{k+1,\frac jp}}{p^{k+1}} \end{aligned} \]

所以 \(y=k+1\) 的时候也成立,而 \(y=1\) 时显然成立,所以原命题成立。

只要掌握了这种推导方法,那么这类问题就可以迎刃而解。


用处

一些 dp 式本质是进行多次卷积(比如上文的 \(f\) 都是 dp 式),利用“卷积的结合律”,将一些需要 \(\mathcal O(n)\) 的递推的 dp 式通过倍增将复杂度将为从 \(\mathcal O(\log n)\)

具体地,我们倍增处理出 \(f_{1,*},f_{2,*},f_{4,*}\cdots\) 的值。假设我们最终要求 \(f_{n,*}\) 的值,只需要根据 \(n\) 的二进制下 01 状态将这些值拼起来就行了,与快速幂的逻辑相似。

示例代码(来自“[省选联考 2024] 虫洞”,其中 \(p\) 表示上文“变式”中的 \(f\)):

void P(){
    for(int i=1;i<=n;i++)p[0][i]=1;
    p_final[1]=1;
    for(int i=1;i<=__lg(K);i++)//处理出卷二的整数次幂次后的值
        for(int j=1;j<=n;j++)
            for(int k:fc[j])(p[i][j]+=p[i-1][k]*p[i-1][j/k]%MOD*inv[i-1][k])%=MOD;//QP(2,i-1)是放在指数上的,应该%(MOD-1)而非%MOD 
    for(int i=__lg(K);i>=0;i--){//拼起来
        if((K>>i)&1){
            for(int j=n;j>=1;j--){
                int tmp=0;
                for(int k:fc[j])(tmp+=p_final[k]*p[i][j/k]%MOD*inv[i][k])%=MOD;
                p_final[j]=tmp;
            }
        } 
    }
    return;
}
posted @ 2025-02-11 16:28  lupengheyyds  阅读(106)  评论(0)    收藏  举报