再探 FWT

再探 FWT

写一下我的简单理解吧

设集合幂级数

[F = sum_{S subseteq U}f_sx^{S} ]

其中 (x^S) 表示 (prod_{iin S} x_i),不难看出这是个多元生成函数

或卷积

[h_t = sum_{t = i | j}f_i * g_j ]

对于所有的 (2^n) 个集合,我们设它的特征向量为 (S_i = [i in S]),求所有向量的点值,容易发现就是

[f'_S = sum_{s in S}f_s ]

两个特征向量相乘,因为 (s_i in [0,1]),所以重复的部分乘机不变,也就是 (s_i * s_i = s_i)

因此我们有

[large f * g = sum_{s}sum_{t}f_sx^s*g_tx^t\ large f * g = sum_{s}sum_{t}f_sg_t*x^{s cup t}\ large f * g= sum_{T}x^Tsum_{scup t = T}f_sg_t ]

也就是我们对两个多项式分别求点值然后相乘最后在插值回去即可

求点值的过程就是 FWT,插值就是 IFWT,我们重新考虑 FWT 的过程

想要求出 (1,2 cdots 2^n) 的点值 (f(1),f(2),f(3)cdots f(2^n))

像 FFT 一样分治下去,考虑是否有第 n 个元素 (x^{{n}})

假设我们已经求出了左半部分点值 (l(1),l(2),l(3)cdots l(2^{n-1})),右半部分点值 (r(1),r(2),r(3)cdots r(2^{n-1}))

现在一起求出 (f(s + 0),f(s+x^{{n}})),末尾加 0 会使右半部分的点值都为零,左边点值不变,而末尾为 1 代入两边点值都不变

[f(s+0)=l(s)*1+r(s)*0 = l(s)\ f(s+x^{{n}})=l(s)*1+r(s)*1=l(s)+r(s) ]

现在考虑 IFWT,我们要求出每一位恰好就是下标的数组

让我们模拟一下,从最低位一直走向最高位,现在有两个向量的点值 (f(0+V),f(x+V))

根据 (f'_S = sum_{s in S}f_s),容易发现 (0+V) 的点值完全包含在 (x+V) 里面,所以 (x+V) 的点值减去 (0+V) 的点值就是 (sum_{sin x+V and x in s}f_s),也就是说我们刚才把不含 x 的部分减掉了,类似的,考虑某个中间过程有 (f(V_1+0+V2))(f(V_1+x+V_2)) 表示 (V_1) 一定选而不是前缀和的情况下两个点值,那么第二个减去第一个就又保证了第二个一定选了 x。

异或卷积

[h_t=sum_{i oplus j = t}f_i*g_i ]

对于所有的 (2^n) 个集合,我们设它的特征向量为 (S_i = (-1)^{[i in S]}),求所有向量的点值,容易发现就是

[f'_S = sum_{s}f_s(-1)^{|S&s|} ]

两个特征向量相乘,因为 (s_i in [0,1]),所以重复的部分乘机变成 1,也就是 (s_i * s_i = 1)

可以发现两个向量本来没有的部分是 1,重叠的部分也变成了 1,剩下的部分就是 -1 了

[large f * g = sum_{s}sum_{t}f_sx^s*g_tx^t\ large f * g = sum_{s}sum_{t}f_sg_t*x^{s oplus t}\ large f * g= sum_{T}x^Tsum_{soplus t = T}f_sg_t ]

再次考虑 FWT,向上面一样分治考虑最后一个元素

假设我们已经求出了左半部分点值 (l(1),l(2),l(3)cdots l(2^{n-1})),右半部分点值 (r(1),r(2),r(3)cdots r(2^{n-1}))

现在一起求出 (f(s + 0),f(s+x^{{n}})),末尾加 0 点值不变,而末尾为 1 左边不变,右边点值乘 -1

[f(s+0)=1*l(s)+1*r(s)\ f(s+x^{{n}})=1*l(s)+(-1)*r(s) ]

考虑和或卷积一样的 IFWT

(f(V_1+0+V2)) 表示对于所有 (V_1 in s)(sum_{s}f_s(-1)^{|s&(0+V_2)|})

(a = f((V_1+0)+V_2),b = f((V_1+x)+V_2))

(f(V_1+0+V_2)=a+b,f(V_1+x+V_2)=a-b)

从而可以轻松解得 (a, b)

应用

为什么要用点值来理解它,因为在一些其他的变化中比较好理解

比如我每一位可以是不同的三种操作杂糅,但事实上因为是点值所以每一位互不影响,但如果用不同的拆式子可能比较麻烦

原文地址:https://www.cnblogs.com/Hs-black/p/13408474.html