当前位置: 首页 > 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.rkmt.cn/news/131293.html

相关文章:

  • 为什么顶级政务部门都在悄悄部署Open-AutoGLM?(内部技术白皮书流出)
  • 还在手动填表?Open-AutoGLM智能填报系统让政务办理效率翻10倍
  • 为什么头部家政公司都在悄悄接入Open-AutoGLM?真相令人震惊
  • 【高效出行必备技能】:利用Open-AutoGLM实现智能加油站实时检索
  • 【Open-AutoGLM校园预约系统实战指南】:手把手教你搭建高效智能服务预约平台
  • 家政O2O新蓝海:Open-AutoGLM智能调度系统的5大核心优势
  • 【稀缺资源抢占秘籍】:用Open-AutoGLM实现健身卡秒约成功率提升90%
  • 非洲经济学者构建计算技能工作坊
  • 政务人员必看:Open-AutoGLM如何实现材料自动预审(准确率高达98.7%)
  • 英语_阅读_How smartphones have changed our lives_待读
  • 十大球阀品牌厂家推荐榜!口碑好评拉满,耐久性实测靠谱,质量和安全的基础保证 - 品牌推荐排行榜
  • 【Java毕设全套源码+文档】基于springboot的大学生爱心互助代购网站设计与实现(丰富项目+远程调试+讲解+定制)
  • 为什么99%的人预约失败?Open-AutoGLM自动调度机制大揭秘
  • 为什么头部宠物连锁品牌都在抢用Open-AutoGLM?真相令人震惊
  • 有关内容
  • 揭秘Open-AutoGLM自动提取技术:如何3分钟搞定公积金提取?
  • 【Open-AutoGLM汽车保养提醒】:揭秘AI驱动的智能养车新范式
  • Open-AutoGLM家政自动化(从下单到履约的全流程AI改造方案)
  • 【学习笔记】树链剖分
  • 错过Open-AutoGLM等于错过未来:宠物服务数字化转型的最后窗口期
  • 面向可访问性的软件测试规范与实践
  • 揭秘Open-AutoGLM核心算法:1秒匹配最优家政服务员的底层逻辑
  • 揭秘Open-AutoGLM预约系统:3大常见问题及高效解决方案
  • 【Open-AutoGLM政务办理辅助】:揭秘AI如何3分钟完成过去3小时的政务流程
  • 0基础也能做?Open-AutoGLM自动化购票全流程,小白秒变技术大神
  • 【技术专家亲授】:基于Open-AutoGLM构建高并发预约机器人的5个关键步骤
  • 为什么 export enum IErrorType { NETWORK = NETWORK, SYSTEM = SYSTEM, } 报错lint/style/noEnum
  • 线性代数复习笔记
  • 【AI+宠物服务新范式】:Open-AutoGLM驱动下的智能调度与客户体验革命
  • 独家披露:某连锁品牌使用Open-AutoGLM后客诉下降76%的内部优化日志