FWT 3 个问题速记
证明都是口胡。参考 \(\text{xth}\)。
以下的 \(\text{merge}\) 为并 , \(\text{merge}(114,514)=114514\)。
默认 \(+\) 和 \(*\) 都是多项式内的 , 类比序列。
\(\text{Q1}\) : \(\text{FWT}\) 用来干什么?
相对于 \(\text{FFT}\) , \(\text{FWT}\) 说处理的问题比较特殊。
众所周知 , \(\text{FFT}\) 可以处理 \(\text A*\text B\) 的问题。
大概可以这样表示 , \(\text A*\text B=\sum\limits^n_{i=1} \sum\limits^n_{j=1} a_ib_jx^{i+j}\) , 对未知数的次数进行排序。
得到多项式 \(\text C=a_0+a_1x+a_2x^2 \dots a_{n-1}x^{n-1}\)。
好 , 现在抛下多项式 , 我们把 \(\text A\) 和 \(\text B\) 看成数组。
那么我们可以知道的是 \(\text C_k\) 的另外的表示方法 : \(\text C_k=\sum\limits_{i+j=k} \text A_i*\text B_j\) , 这种表示方法其实是已经按照次数排好序了。
所以说说了怎么久没有说 \(\text{FWT}\) 可以干什么。
它可以求 :
\(\text{Q2}\) : \(\text{FWT}\) 的基本流程?
\(\text{FWT}\) 的基本流程是 : \(\text A\) 和 \(\text B\) \(\xrightarrow[O(n \log n)] {\text{FWT}}\) \(\text {FWT(A)}\) 和 \(\text {FWT(B)}\) \(\xrightarrow[O(n)] {\text{相乘}}\) \(\text {FWT(C)}\) \(\xrightarrow[O(n \log n)] {\text{IFWT}}\) \(\text C\) , 得出答案。
和 \(\text{FFT}\) 类似?
\(\text{Q3}\) : \(\text{FWT}\) 数组的定义? \(\text{FWT}\) 的推导?
对于 \(\text {or}\)
我们必须要构造一个基于原本数组的新数组 , \(\text{FWT}\) 数组 , 来达到可以直接做乘法的目的。
以 \(\text{or}\) 为例子。
我们设 \(\text{FWT(A)}_i=\sum\limits_{j\ \text{or}\ i=i} \text A_j\) , 同理 \(\text B\) 和 \(\text{C}\)。
我们设 \(\text A_{1\dots\frac n 2}=\text A_l\) , \(\text A_{\frac n 2+1\dots n}= \text A_r\) , 同理 \(\text B\) 和 \(\text{C}\)。 可得 :
那么有几个结论要记 ,
然后这就是全部内容。
对于它的 \(\text{IFWT}\) , 可得 :
对于 \(\text {and}\)
我们设 \(\text{FWT(A)}_i=\sum\limits_{j\ \text{and}\ i=i} \text A_j\) , 同理 \(\text B\) 和 \(\text{C}\)。可得 :
证明 :
且
对于它的 \(\text{IFWT}\) , 可得 :
对于 \(\text {xor}\)
我们设 \(\text{FWT(A)}_i=\sum\limits_{j\ \text{and}\ i=i} \text A_j\) , 同理 \(\text B\) 和 \(\text{C}\)。可得 :