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 C_k=\sum\limits_{i\ \text{or}\ j=k} \text A_i * \text B_j \]

\[\text C_k=\sum\limits_{i\ \text{and}\ j=k} \text A_i * \text B_j \]

\[\text C_k=\sum\limits_{i\ \text{xor}\ j=k} \text A_i * \text B_j \]

\(\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}\)。 可得 :

\[\begin{aligned} \text{FWT}(\text A) * \text{FWT}(\text B) = & \sum\limits_{j\ \text{or}\ i=i , k\ \text{or}\ i=i} \text A_j * \text B_k \\ = & \sum\limits_{(j\ \text{or}\ k)\ \text{or}\ i=i } \text A_j * \text B_k \\ = &\ \text{FWT(C)} \end{aligned}\]

那么有几个结论要记 ,

\[\text{FWT(A+B)=FWT(A)+FWT(B)} \]

\[\text{FWT(A)=merge}(\text A_l,\text A_l+\text A_r) \]

然后这就是全部内容

对于它的 \(\text{IFWT}\) , 可得 :

\[\text{C=merge}(\text {FWT}(\text A_l),\text {FWT}(\text A_r)-\text {FWT}(\text A_l)) \]

对于 \(\text {and}\)

我们设 \(\text{FWT(A)}_i=\sum\limits_{j\ \text{and}\ i=i} \text A_j\) , 同理 \(\text B\)\(\text{C}\)。可得 :
证明 :

\[\begin{aligned} \text{FWT}(\text A) * \text{FWT}(\text B) = & \sum\limits_{j\ \text{and}\ i=i , k\ \text{and}\ i=i} \text A_j * \text B_k \\ = & \sum\limits_{(j\ \text{and}\ k)\ \text{and}\ i=i } \text A_j * \text B_k \\ = &\ \text{FWT(C)} \end{aligned}\]

\[\text{FWT(A)=merge}(\text A_l+\text A_r,\text A_l) \]

对于它的 \(\text{IFWT}\) , 可得 :

\[\text{C=merge}(\text {FWT}(\text A_l)-\text {FWT}(\text A_r),\text {FWT}(\text A_l)) \]

对于 \(\text {xor}\)

我们设 \(\text{FWT(A)}_i=\sum\limits_{j\ \text{and}\ i=i} \text A_j\) , 同理 \(\text B\)\(\text{C}\)。可得 :

\[\text{FWT(A)=merge}(\text A_l+\text A_r,\text A_l-\text A_r) \]

\[\text{C=merge}(\frac{\text {FWT}(\text A_l)+\text {FWT}(\text A_r)} 2,\frac{\text {FWT}(\text A_l)-\text {FWT}(\text A_r)} 2) \]

posted @ 2020-02-06 22:20  _ARFA  阅读(214)  评论(0编辑  收藏  举报