ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

位运算卷积与快速沃尔什变换

2022-07-26 00:03:08  阅读:166  来源: 互联网

标签:运算 卷积 sum bitand 沃尔什 FWT FMT operatorname mathrm


我们要快速计算一类形如

\[c_i=\sum_{j\oplus k=i} a_jb_k \]

的问题,其中 \(\oplus\) 是 \(\operatorname{bitand},\operatorname{bitor},\operatorname{xor}\) 之一。

And 卷积 / Or 卷积

对于下标范围是 \([0,2^n-1]\) 的数列 \(a\),设

\[\mathrm{FMT}(a)_i=\sum_{j\operatorname{bitand} i=i} a_j. \]

我们设 And 卷积的运算符是 \(\times\),那么:

\[\begin{aligned} \mathrm{FMT}(a\times b)_i&=\sum_{j\operatorname{bitand} i=i} (a\times b)_j\\ &=\sum_{j\operatorname{bitand} i=i} \sum_{x\operatorname{bitand} y=j} a_xb_y\\ &=\sum_{x\operatorname{bitand} y\operatorname{bitand} i=i} a_xb_y\\ &=\mathrm{FMT}(a)_i\cdot \mathrm{FMT}(b)_i. \end{aligned} \]

因此,我们只需要对于 \(a\) 和 \(b\) 分别求出其 \(\mathrm{FMT}\),点积后再做 \(\mathrm{FMT}\) 的逆变换即可。

考虑这里的 \(\mathrm{FMT}\) 实际上就是高维前缀和,我们对于所有 \(i\in [0,n-1]\cap \Z\),在第 \(i\) 维做一遍前缀和即可。

Or 卷积是类似的。

void FMTAnd(ll (&arr)[Up],ll w){
	For(j,0,n-1) For(i,0,up) if(!((i>>j)&1)){
		arr[i]=(arr[i]+w*arr[i|(1<<j)])%Mod;
	}
}
void FMTOr(ll (&arr)[Up],ll w){
	For(j,0,n-1) For(i,0,up) if(!((i>>j)&1)){
		arr[i|(1<<j)]=(arr[i|(1<<j)]+w*arr[i])%Mod;
	}
}

快速沃尔什变换 FWT:Xor 卷积

这部分是抄的 command_block 博客。

Xor 没有 And 和 Or 那样优秀的性质。仍然考虑求出一个 \(\mathrm{FWT}(a)_i\),设它是

\[\mathrm{FWT}(a)_i=\sum_{j} C_{i,j}a_j. \]

我们需要让它满足:

\[\mathrm{FWT}(a)\cdot \mathrm{FWT}(b)=\mathrm{FWT}(a\times b). \]

其中 \(\times\) 表示 Xor 卷积。

我们大力展开上式:

\[\begin{aligned} \mathrm{FWT}(a)_i\cdot \mathrm{FWT}(b)_i&=\sum_j C_{i,j}a_j\sum_{k} C_{i,k}b_k.\\ \mathrm{FWT}(a\times b)_i&=\sum_j C_{i,j} (a\times b)_j\\ &=\sum_j C_{i,j} \sum_{x\operatorname{xor} y=j} a_xb_y\\ &=\sum_{j,k} a_jb_kC_{i,j\operatorname{xor} k}. \end{aligned} \]

对比左右两边的展开式,可以得到 \(C_{i,j}C_{i,k}=C_{i,j\operatorname{xor} k}\)。

我不理解啊??????然后为啥各位就互不影响了啊?????????????????????

标签:运算,卷积,sum,bitand,沃尔什,FWT,FMT,operatorname,mathrm
来源: https://www.cnblogs.com/alan-zhao-2007/p/bitwise-convolution-and-fwt.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有