Xor-FWT 的另一種理解方式
學習 \(\text{Fennec's Algorithm}\) 的額外收穫,順手記錄一下。
假設我們要求兩個長度為 \(n\) 的陣列的異或卷積,為方便起見令 \(n = 2^m\),也就是類似下面的形式
考慮構造 \(\mathbb{Z}_2^n\) 中的向量表達異或運算。對於兩條向量 \(u, v\),它們的加法 \(u + v\) 恰好就是原本的 \(i \oplus j\)(因為是 \(\bmod 2\) 意義下所以自然不會進位)。
類似的定義向量點乘 \(u \cdot v = u_0 \times v_0 + u_1 \times v_1 + \ldots u_{m - 1} \times v_{m - 1}\),同樣是在 \(\bmod 2\) 意義下。所以結果相當於 \(\text{pocount}(i \ \text{and} \ j) \bmod 2\)。我們發現其恰好對應 \(\text{FWT}\) 的貢獻係數。下面簡記 \(\langle i, j \rangle = \text{pocount}(i \ \text{and} \ j) \bmod 2\)。
設 \(\hat{A}_i = \sum\limits_{j} A_i (-1)^{\langle i, j \rangle}\)。\(\text{Xor-FWT}\) 的主流程即將 \(\hat{A}\) 和 \(\hat{B}\) 的對應位置乘起來,得到 \(\hat{C}\)。
現在考慮 \(A_u\) 對 \(\hat{A}_w\) 的貢獻,係數為 \((-1)^{u \cdot w}\),類似的 \(B_v\) 對 \(\hat{B}_w\) 的貢獻係數 \((-1)^{v \cdot w}\),而對應位置係數相乘相當於指數相加,即 \(A_u \times B_v\) 對 \(C_w\) 的貢獻係數 \((-1)^{(u + v) \cdot w}\),即先將 \(u\) 和 \(v\) 做異或卷積(\(u + v\)),再考察其對 \(\hat{C}_w\) 的貢獻。