当前位置: 首页 > news >正文

快速沃尔什变换 FWT

思路

FWT 用以快速求:

\[h(x)\sum_{a\oplus b=x}f(a)g(b) \]

其中 \(\oplus\) 可以是很多操作,常见的比如按位与、或、异或等。

我们考虑构造一种映射 \(\mathrm{FWT}\),满足:

\[\mathrm{FWT}(h)=\mathrm{FWT}(f)\cdot\mathrm{FWT}(g) \]

和 FFT 很像。

常见实现

按位或

一种可行的构造为:

\[\mathrm{FWT}(f)(i)=\sum_{j|i=i}f(j) \]

考虑如何快速变换。存在分治做法:

每次将当前序列分为左右两部分,则左侧当前最高位为 \(0\),右侧当前最高位为 \(1\),先递归处理两部分,然后将左侧的答案加到右侧对应位置即可。当前最高位是关于下标的,可以感性理解,理性理解的话就是一侧的块长关于 \(2\) 的对数那一位。

记分出来的两半序列为 \(f_0,f_1\)\(\mathrm{merge}\) 表示拼接两个序列,那么可以写作:

\[\mathrm{FWT}(f)=\mathrm{merge}(f_0,f_1+f_0) \]

逆变换的话减掉就行了:

\[\mathrm{IFWT}(f)=\mathrm{merge}(f_0,f_1-f_0) \]

通常使用非递归实现。

按位与

和按位或很像,一种可行的构造为:

\[\mathrm{FWT}(f)(i)=\sum_{j\&i=i}f(j) \]

剩下的也基本一样,也是分治:

\[\mathrm{FWT}(f)=\mathrm{merge}(f_0+f_1,f_1) \]

逆变换:

\[\mathrm{IFWT}(f)=\mathrm{merge}(f_0-f_1,f_1) \]

按位异或

\(x\circ y=\mathrm{popcnt}(x\&y)\bmod 2\),那么有 \((x\circ y)\oplus(x\circ z)=x\circ(y\oplus z)\)

存在构造:

\[\mathrm{FWT}(f)(i)=\sum_{j\circ i=0}f(j)-\sum_{j\circ i=1}f(j) \]

存在分治做法:

\[\mathrm{FWT}(f)=\mathrm{merge}(f_0+f_1,f_0-f_1) \]

逆变换:

\[\mathrm{IFWT}(f)=\mathrm{merge}(\frac{f_0+f_1}{2},\frac{f_0-f_1}{2}) \]

三份代码

注意逆运算时 orFWTandFWT \(x\) 带入 \(-1\)xorFWT 带入 \(\frac{1}{2}\)

inline vec<mint> orFWT(vec<mint> v,mint x=1){int n=v.size();for(int st=2,k=1;st<=n;st<<=1,k<<=1)for(int i=0;i<n;i+=st)repl(j,0,k)v[i+j+k]+=v[i+j]*x;return v;
}
inline vec<mint> andFWT(vec<mint> v,mint x=1){int n=v.size();for(int st=2,k=1;st<=n;st<<=1,k<<=1)for(int i=0;i<n;i+=st)repl(j,0,k)v[i+j]+=v[i+j+k]*x;return v;
}
inline vec<mint> xorFWT(vec<mint> v,mint x=1){int n=v.size();for(int st=2,k=1;st<=n;st<<=1,k<<=1)for(int i=0;i<n;i+=st)repl(j,0,k)v[i+j]+=v[i+j+k],v[i+j+k]=v[i+j]-v[i+j+k]-v[i+j+k],v[i+j]*=x,v[i+j+k]*=x;return v;
}
http://www.jsqmd.com/news/119249/

相关文章:

  • 如何在72小时内完成Open-AutoGLM对接上线?一线工程师亲述避坑指南
  • 为什么顶级政务部门都在悄悄部署Open-AutoGLM?(内部技术白皮书流出)
  • 年末包装设计公司排名——行业实力派清单 - 黑马榜单
  • 还在手动填表?Open-AutoGLM智能填报系统让政务办理效率翻10倍
  • 【Open-AutoGLM加油站查询实战指南】:手把手教你快速定位全国油站信息
  • 英语_阅读_What if something turns out bad_待读
  • 为什么头部家政公司都在悄悄接入Open-AutoGLM?真相令人震惊
  • LLaMA Factory模型微调实战
  • 【高效出行必备技能】:利用Open-AutoGLM实现智能加油站实时检索
  • Information Fusion 接收letter ,书评,评论,观点文章
  • 揭秘Open-AutoGLM校园服务引擎:如何实现99.9%可用性的智能调度?
  • STP实验
  • 【Open-AutoGLM校园预约系统实战指南】:手把手教你搭建高效智能服务预约平台
  • 【高校数字化转型利器】:Open-AutoGLM如何3天完成全校服务预约上线?
  • SCI :Letter发表攻略:好发与否全解析
  • 揭秘Open-AutoGLM油站数据接口:如何在5分钟内实现精准查询与调用
  • 【稀缺资源抢占秘籍】:用Open-AutoGLM实现健身卡秒约成功率提升90%
  • 家政O2O新蓝海:Open-AutoGLM智能调度系统的5大核心优势
  • 非洲经济学者构建计算技能工作坊
  • 英语_阅读_How smartphones have changed our lives_待读
  • 9 个降AI率工具,研究生必备!
  • 政务人员必看:Open-AutoGLM如何实现材料自动预审(准确率高达98.7%)
  • 【Linux 网络基础】HTTPS 技能文档
  • 【Open-AutoGLM洗车预约系统深度解析】:掌握智能调度背后的核心算法与落地实践
  • 大学生必备9款免费AI论文神器:真实参考文献+轻松搞定毕业论文
  • 【Java毕设全套源码+文档】基于springboot的大学生爱心互助代购网站设计与实现(丰富项目+远程调试+讲解+定制)
  • 十大球阀品牌厂家推荐榜!口碑好评拉满,耐久性实测靠谱,质量和安全的基础保证 - 品牌推荐排行榜
  • 错过Open-AutoGLM等于错过未来:宠物服务数字化转型的最后窗口期
  • 【学习笔记】树链剖分
  • 揭秘Open-AutoGLM背后的技术架构:为何它能成为宠物O2O的破局关键