k维FWT

Part1. 从一个新的角度看 FWT

我们设 c(i,j)Aj 对于 FWT[A]i 的贡献的系数。那么我们重新描述 FWT 的变化过程。

FWT[A]i=i=0n1c(i,j)Aj

Lemma:我们知道 c(i,j)c(i,k)=c(i,jk)。其中的 为任意一种的运算。

Proof:我们知道j=0n12c(i,j)Aj+j=n12+1nc(i,j)Aj=j=1n1C(i,j)Aj。然后将其带入一个运算即可。

因为每一位都是独立的,所以我们只需要考虑构造 c(0,0)c(0,1)c(1,0)c(1,1) 这个矩阵就可以做 FWT。我们称这个矩阵为位矩阵。然后我们根据 c(i,j)c(i,k)=c(i,jk) 这个性质去构造这个矩阵即可。

Part2.FWTk-FWT

考虑 FWT 的本质。实际上就是对一个 n{0,1} 向量对于每一位取 max(或运算) 或 min(与运算) 或者求和后 mod2(异或运算)。而答案就是一个 2n1 维的向量。

此时我们将 FWT 从二维推拓展 k 维后会有什么区别?

Part3. k-FWT 的或运算和与运算

我们定义 k 进制下的两个数 x1,2,n,y1,2,n 的位运算为 zi=max(xi,yi)

那么我们考虑去构造位矩阵。我们知道 w(i,j)w(i,k)=w(i,max(j,k))。为了方便构造我们钦定 w(i,j)[0,1],jk。可得 w(i,j)w(i,k)=w(i,k)

  • w(i,k)=0w(i,j) 为任意数。

  • w(i,k)=1w(i,j) 必须为 1

即每一行中所有 1 在所有 0 前面。那么我们就可以构造出矩阵:

100011001111

对于与运算,构造方法是类似的,这里不在展开。

Part 4. k -FWTxor 运算

我们定义 k 进制下的两个数 x1,2,n,y1,2,nxor 运算为 zi=(xi+yi)modk

然后我们就有 w(i,y)w(i,z)=w(i,(y+z)modk)。然后我们发现当 w(i,y)=ωky 时,满足条件 w(i,y)w(i,z)=w(i,(y+z)modk)

但是这样子的话所有数都相同,所以没有逆。我们考虑带入范德蒙德矩阵,那么可得:

[111...11ωk1ωk2...ωkk11ωk2ωk4...ωk2(k1)...............1ωkk1ωk2(k1)...ωk(k1)(k1)]

此时依然满足条件。根据范德蒙德矩阵的性质,我们知道上面那个矩阵的逆就是

1k[111...11ωk1ωk2...ωk(k1)1ωk2ωk4...ωk2(k1)...............1ωk(k1)ωk2(k1)...ωk(k1)(k1)]

但是 k 不一定是 2 的幂,所以在模意义下的单位根不一定存在。此时你发现一般的办法都不可以满足不能分解质因数这个条件例如你对于整体模 ik1,但是这个是可以被因式分解。于是这里我们引入分圆多项式

我们定义分圆多项式为 Φk(x)=1jn, jk(iωkj)。其有两个性质:Φk(i) 不能被因式分解和 Φk(i)(ik1)

应为 Φk(i) 不可以被因式分解,所以我们直接对于这个东西取模肯定没有问题。但是可能会超时,于是我们考虑先对 ik1 取模,最后再对 Φk(i) 取模,此时这个东西的正确性也是有保证的。

posted @   sqrtqwq  阅读(1)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示