知识点简单总结——FWT(快速沃尔什变换),FST(快速子集变换)
知识点简单总结——FWT(快速沃尔什变换),FST(快速子集变换)
闲话
博客园的markdown也太傻逼了吧。
快速沃尔什变换
位运算卷积
形如 $ f[ i ] = \sum\limits_{ j \oplus k = i} g[ j ] * h[ k ] $ 的形式的式子。
正常计算是 $ n^{ 2 } $ 。
与运算卷积
众所周知有 $ ( i \& j ) == k \longleftrightarrow ( i \& k == k ) \& \& ( j \& k == k ) $ 。
考虑构造 $ F( i ) = \sum\limits_{ j \& i == i } f( j ) $ 。
由上述结论容易推导得 $ F( i ) = G( i ) * H( i ) $ 。
将 $ f $ 正变换为 $ F $ 的方法:
由于 $ F $ 为父集和,考虑从低到高对于每一位,每次考虑仅有这一位不同的两个数,将该位为1的元素加到对应只有该位不同为0的元素上。
逆变换则是按照相同顺序每次从某一位为0的元素减去该位对应为1的元素。
或运算卷积
上述结论对或运算依然成立即 $ ( i | j ) == k \longleftrightarrow ( i | k == k ) \& \& ( j | k == k ) $ 。
同样构造 $ F( i ) = \sum\limits_{ j | i == i } f( j ) $ 。
正变换与与运算相似,不过是为将该位为0的元素加到该位为1的元素上,逆变换反之。
异或运算卷积
有结论 $ bitcount( i \& k ) \oplus bitcount ( j \& k ) \text{的奇偶} == bitcount( ( i \oplus j ) \& k ) \text{的奇偶} $ 。
构造 $ F( i ) = \sum\limits_{j} ( -1 )^{ bitcount( j \& i ) } f( j ) $ ,借助上述结论证明。
正变换依然从低到高位考虑每一对仅有对应位不同的两个数,
仅用0和1进行与运算,只有 $ 1 \& 1 = 1 $ ,其余均为0,
也就是说只有这一种运算改变奇偶性。
所以每次变换有 $ a = a + b , b = a - b $ 。
逆运算重新计算回去就是 $ a = \frac{ a + b }{2} , b = \frac{ a - b }{2} $ 。
快速子集变换
在DP问题中经常会有 $ f[ i ] = \sum\limits_{ j \subseteq i } g[ j ] * h[ i - j ] $ 一类的式子。
直接枚举子集是 $ 3^{ n } $ 。
把上式转换为 $ f[ i ] = \sum\limits_{ j | k == i , j \& k == 0} g[ j ] * h[ k ] $ 。
为了避免集合相交,考虑增加一维变成 $ f[c][i] $ , $ c $ 代表集合大小( $ 1 $ 的个数),仅在对应正确集合大小的时候某一位才有值。
然后直接或卷积就好了。
k进制异或卷积
考虑在上述二进制异或卷积中所使用的运算
二进制异或相当于二进制下不进位加法。
二进制与相当于二进制下不进位乘法。
$ bitcount $ 也可以同理推论。
因此我们用这个定义将其扩展到k进制。
之后考虑二进制卷积中 $ -1 $ 的含义。
异或卷积这玩意是有点类似循环卷积的。
所以我们可以想到利用单位根。
用类似方法就能求出对应k进制下的变换。
或者证不明白直接背个简单结论就行了:
$ j $ 对 $ i $ 的正贡献为 $ f_{ i , j } = \omega_{ k }^{ ij } $ ,逆贡献为 $ f_{ i , j }^{ -1 } $ 。
知识点简单总结——FWT(快速沃尔什变换),FST(快速子集变换)的更多相关文章
- Codeforces 662C(快速沃尔什变换 FWT)
感觉快速沃尔什变换和快速傅里叶变换有很大的区别啊orz 不是很明白为什么位运算也可以叫做卷积(或许不应该叫卷积吧) 我是看 http://blog.csdn.net/liangzhaoyang1/ar ...
- 快速沃尔什变换(FWT)及K进制异或卷积&快速子集变换(FST)讲解
前言: $FWT$是用来处理位运算(异或.与.或)卷积的一种变换.位运算卷积是什么?形如$f[i]=\sum\limits_{j\oplus k==i}^{ }g[j]*h[k]$的卷积形式(其中$\ ...
- 关于快速沃尔什变换(FWT)的一点学习和思考
最近在学FWT,抽点时间出来把这个算法总结一下. 快速沃尔什变换(Fast Walsh-Hadamard Transform),简称FWT.是快速完成集合卷积运算的一种算法. 主要功能是求:,其中为集 ...
- FWT快速沃尔什变换学习笔记
FWT快速沃尔什变换学习笔记 1.FWT用来干啥啊 回忆一下多项式的卷积\(C_k=\sum_{i+j=k}A_i*B_j\) 我们可以用\(FFT\)来做. 甚至在一些特殊情况下,我们\(C_k=\ ...
- 快速沃尔什变换 FWT 学习笔记【多项式】
〇.前言 之前看到异或就担心是 FWT,然后才开始想别的. 这次学了 FWT 以后,以后判断应该就很快了吧? 参考资料 FWT 详解 知识点 by neither_nor 集训队论文 2015 集合幂 ...
- 浅谈算法——FWT(快速沃尔什变换)
其实FWT我啥都不会,反正就是记一波结论,记住就好-- 具体证明的话,推荐博客:FWT快速沃尔什变换学习笔记 现有一些卷积,形如 \(C_k=\sum\limits_{i\lor j=k}A_i*B_ ...
- 集合并卷积的三种求法(分治乘法,快速莫比乌斯变换(FMT),快速沃尔什变换(FWT))
也许更好的阅读体验 本文主要内容是对武汉市第二中学吕凯风同学的论文<集合幂级数的性质与应用及其快速算法>的理解 定义 集合幂级数 为了更方便的研究集合的卷积,引入集合幂级数的概念 集合幂级 ...
- 能轻松背板子的FWT(快速沃尔什变换)
FWT应用 我不知道\(FWT\)的严格定义 百度百科和维基都不知道给一坨什么****东西** FWT(Fast Walsh Fransform),中文名快速沃尔什变换 然后我也不知道\(FWT\)到 ...
- [学习笔记]FWT——快速沃尔什变换
解决涉及子集配凑的卷积问题 一.介绍 1.基本用法 FWT快速沃尔什变换学习笔记 就是解决一类问题: $f[k]=\sum_{i\oplus j=k}a[i]*b[j]$ 基本思想和FFT类似. 首先 ...
随机推荐
- Solution -「CF 1380F」Strange Addition
\(\mathcal{Description}\) Link. 定义两个数在进行加法时,进位单独作为一位.例如: . 给定一个 \(n\) 为数和 \(m\) 次修改操作,每次修改会修改 ...
- Winds10 安装JDK8.0教程
首先下载一个jdk,可以通过这个链接下载:https://pan.baidu.com/s/1aP6SdL8UQK_C2GvALLb6Wg也可以去官网下载:https://www.oracle.com/ ...
- php发送邮件 (phpmailer)
1.首先下载phpMailer文件官方文件https://sourceforge.net/projects/phpmailer/: 还有class.smtp.php. 2.去配置一下发送邮件的服务器, ...
- [LeetCode]1480. 一维数组的动态和
给你一个数组 nums .数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]-nums[i]) . 请返回 nums 的动态和. 示例 1: 输入:nums = [1, ...
- Python中读写文件三部曲
写入文件:要把第二个参数 'r' 改成 'w' ,表示write,即以写入的模式打开文件; 往文件中写入内容,使用write()函数. 例子如下:注意 'w' 写入模式会暴力清空掉原有文件,然后再写 ...
- Docker配置Pytorch深度学习环境
拉取镜像 $ docker pull pytorch/pytorch:1.9.1-cuda11.1-cudnn8-devel 查看本地已有镜像 $ docker images 创建容器 $ docke ...
- MShadow中的表达式模板
表达式模板是Eigen.GSL和boost.uBLAS等高性能C++矩阵库的核心技术.本文基于MXNet给出的教程文档来阐述MXNet所依赖的高性能矩阵库MShadow背后的原理. 编写高效的机器学习 ...
- 思迈特软件Smartbi光鲜亮丽的背后是什么在支撑?
思迈特软件Smartbi是国内知名BI厂商,自2011年成立以来就以提升和挖掘客户的价值为使命,致力于为客户提供一站式商业智能平台和BI解决方案,发展到如今已经获得了来自国家.地方政府.国内外权威分析 ...
- 安装配置ingress-nginx支持https访问
说明: 1.k8s版本:v1.23: 2.内网测试环境1台master,2台node节点,使用 DaemonSet+HostNetwork+nodeSelector 方式部署 ingress- ...
- Winfrom中关于toolStrip工具栏中按钮背景的设置
在ToolStrip中可以存放很多种控件,一般来说,主要使用的是Button和DropDownButton,通常情况下,Button需要设置图片和文字,网上找了很多个方法都不太靠谱,自己试验了下,下面 ...