知识点简单总结——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(快速子集变换)的更多相关文章

  1. Codeforces 662C(快速沃尔什变换 FWT)

    感觉快速沃尔什变换和快速傅里叶变换有很大的区别啊orz 不是很明白为什么位运算也可以叫做卷积(或许不应该叫卷积吧) 我是看 http://blog.csdn.net/liangzhaoyang1/ar ...

  2. 快速沃尔什变换(FWT)及K进制异或卷积&快速子集变换(FST)讲解

    前言: $FWT$是用来处理位运算(异或.与.或)卷积的一种变换.位运算卷积是什么?形如$f[i]=\sum\limits_{j\oplus k==i}^{ }g[j]*h[k]$的卷积形式(其中$\ ...

  3. 关于快速沃尔什变换(FWT)的一点学习和思考

    最近在学FWT,抽点时间出来把这个算法总结一下. 快速沃尔什变换(Fast Walsh-Hadamard Transform),简称FWT.是快速完成集合卷积运算的一种算法. 主要功能是求:,其中为集 ...

  4. FWT快速沃尔什变换学习笔记

    FWT快速沃尔什变换学习笔记 1.FWT用来干啥啊 回忆一下多项式的卷积\(C_k=\sum_{i+j=k}A_i*B_j\) 我们可以用\(FFT\)来做. 甚至在一些特殊情况下,我们\(C_k=\ ...

  5. 快速沃尔什变换 FWT 学习笔记【多项式】

    〇.前言 之前看到异或就担心是 FWT,然后才开始想别的. 这次学了 FWT 以后,以后判断应该就很快了吧? 参考资料 FWT 详解 知识点 by neither_nor 集训队论文 2015 集合幂 ...

  6. 浅谈算法——FWT(快速沃尔什变换)

    其实FWT我啥都不会,反正就是记一波结论,记住就好-- 具体证明的话,推荐博客:FWT快速沃尔什变换学习笔记 现有一些卷积,形如 \(C_k=\sum\limits_{i\lor j=k}A_i*B_ ...

  7. 集合并卷积的三种求法(分治乘法,快速莫比乌斯变换(FMT),快速沃尔什变换(FWT))

    也许更好的阅读体验 本文主要内容是对武汉市第二中学吕凯风同学的论文<集合幂级数的性质与应用及其快速算法>的理解 定义 集合幂级数 为了更方便的研究集合的卷积,引入集合幂级数的概念 集合幂级 ...

  8. 能轻松背板子的FWT(快速沃尔什变换)

    FWT应用 我不知道\(FWT\)的严格定义 百度百科和维基都不知道给一坨什么****东西** FWT(Fast Walsh Fransform),中文名快速沃尔什变换 然后我也不知道\(FWT\)到 ...

  9. [学习笔记]FWT——快速沃尔什变换

    解决涉及子集配凑的卷积问题 一.介绍 1.基本用法 FWT快速沃尔什变换学习笔记 就是解决一类问题: $f[k]=\sum_{i\oplus j=k}a[i]*b[j]$ 基本思想和FFT类似. 首先 ...

随机推荐

  1. Spring 控制反转和依赖注入

    控制反转的类型 控制反转(IOC)旨在提供一种更简单的机制,来设置组件的依赖项,并在整个生命周期管理这些依赖项.通常,控制反转可以分成两种子类型:依赖注入(DI)和依赖查找(DL),这些子类型各自又可 ...

  2. Java并发基础之AbstractQueuedSynchronizer(AQS)

    AbstractQueuedSynchronizer同步器是实现JUC核心基础组件,因为 定义了一套多线程访问共享资源的同步器框架.前面几篇文章中JUC同步工具中都利用AQS构建自身的阻塞类.AQS解 ...

  3. CPU、进程、线程原理

    巨人的肩膀 看完这篇还不懂高并发中的线程与线程池你来打我 (qq.com)

  4. AQS源码二探-JUC系列

    本文已在公众号上发布,感谢关注,期待和你交流. AQS源码二探-JUC系列 共享模式 doAcquireShared 这个方法是共享模式下获取资源失败,执行入队和等待操作,等待的线程在被唤醒后也在这个 ...

  5. “百度杯”CTF比赛 九月场 类型:Web 题目名称:SQLi ---不需要逗号的注入技巧

    今天在i春秋做题的时候遇到了一道非常好的题目,于是在参考了wp的基础上自己复现了一遍,算作一种技巧的学习与收藏吧. 题目i春秋连接:https://www.ichunqiu.com/battalion ...

  6. while read line [linux] shell 学习

    转至:https://blog.csdn.net/qq_22083251/article/details/80484176 循环中的重定向 或许你应该在其他脚本中见过下面的这种写法: while re ...

  7. Activity的创建及生命周期

  8. MySQL 学习-进阶

    MySQL高级学习 一.MySQL 事务 1.1.事务的概念 一条或多条 SQL 语句组成一个执行单元,其特点是这个单元要么同时成功要么同时失败,单元中的每条 SQL 语句都相互依赖,形成一个整体,如 ...

  9. YUV相关积累

    关于yuv 格式-Semi Planar和Planar https://www.cnblogs.com/welen/articles/5454315.html

  10. petite-vue源码剖析-v-if和v-for的工作原理

    深入v-if的工作原理 <div v-scope="App"></div> <script type="module"> i ...