Fast Walsh-Hadamard Transform
这玩意最近经常出现额……
FFT解决的问题是Ck=∑i+j=kAi⋅Bj
其中A、B、C是三个列向量。
而FWHT是将∑下面的+号换成位运算符时采用的方法。
做法与FFT相似,先将类似的系数表达式转换为点值表达式,点积之后再转换回来。
将系数表达式转换为点值表达式的函数叫tf,反向的叫utf。
A0表示A的前半部分(二进制位最高位为0),A1表示A的后半部分(二进制位最高位为1),转换方法为:
tfxor(A)=(tfxor(A0+A1),tfxor(A0−A1))utfxor(A)=(utfxor(A0+A12),utfxor(A0−A12))
tfand(A)=(tfand(A0+A1),tfand(A1))utfand(A)=(utfand(A0−A1),utfand(A1))
tfor(A)=(tfor(A0),tfor(A1+A0))utfor(A)=(utfor(A0),utfor(A1−A0))
还有一点就是,先递归再转换还是先转换再递归是对结果没有影响的,所以可以把tf与utf写成一个函数。
P.S. http://picks.logdown.com/posts/179290-fast-walsh-hadamard-transform
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步