高維FWT


給定\(F(a_0,a_1...a_n)_3\)\(G(a_0,a_1...a_n)_3\)

定義\(a \oplus b\) 為3進制不進位加法,求$ Ans= F \oplus G$ ,即求

\[Ans(a_0+b_0 \bmod 3,a_1+b_1 \bmod 3,...,a_n+b_n \bmod 3)_3=F(a_0,a_1...a_n)_3 G(b_0,b_1...b_n)_3 \]

part 1

我們先考慮\(n\)\(1\)的情況,可以發現這就是一個長度為\(3\)的循環卷積。

因為該卷積的元素個數很少,我們考慮如何對多項式\(A(x)\)暴力求\(DFT(A(x))\)\(IDFT(A(x))\)

回想一下\(DFT\)是在做什么,它相當於是給定多項式\(A(x)\)各位的系數\(a_i\),對多項式\(A(x)\)\(x=\omega_n^0,\omega_n^1...\omega_n^{n-1}\)時的值。

\(IDFT\)就是給定多項式\(A(x)\)\(x=\omega_n^0,\omega_n^1...\omega_n^{n-1}\) 的值,求多項式\(A(x)\)各位的系數\(a_i\)

考慮一下以下矩陣(范德蒙德矩陣)

\[T_n = \begin{bmatrix} 1 & 1 & 1 & \ldots & 1 \\ 1 & \omega_n ^ 1 & \omega_n ^ 2 & \ldots & \omega_n ^ {n - 1} \\ 1 & \omega_n ^ 2 & \omega_n ^ 4 & \ldots & \omega_n ^ {2(n - 1)} \\ \ldots & \ldots & \ldots & \ddots & \ldots \\ 1 & \omega_n ^ {n - 1} & \omega_n ^ {2(n - 1)} & \ldots & \omega_n ^ {(n - 1)(n - 1)} \\ \end{bmatrix} \]

我們發現對\(A(x)\)\(DFT\)就是對\(A(x)\)所表示的向量乘上矩陣\(T_n\)

考慮\(T_n\)的逆矩陣

\[T_n ^ {-1} = \frac{1}{n} \begin{bmatrix} 1 & 1 & 1 & \ldots & 1 \\ 1 & \omega_n ^ {-1} & \omega_n ^ {-2} & \ldots & \omega_n ^ {-(n - 1)} \\ 1 & \omega_n ^ {-2} & \omega_n ^ {-4} & \ldots & \omega_n ^ {-2(n - 1)} \\ \ldots & \ldots & \ldots & \ddots & \ldots \\ 1 & \omega_n ^ {-(n - 1)} & \omega_n ^ {-2(n - 1)} & \ldots & \omega_n ^ {-(n - 1)(n - 1)} \\ \end{bmatrix} \]

可以證明該矩陣是\(T_n\)的逆矩陣(當然我不會啦)

那么對\(A(x)\)\(IDFT\)就是對\(A(x)\)所表示的向量乘上矩陣\(T_n^{-1}\)

對於一個大小為\(3\)的多項式,我們只要先求出\(3\)次單位根,再暴力乘上一個\(3*3\)的矩陣就好了

Part 2

\(n>1\),那么我們要求一下式子(為了方便以下式子都省略\(\bmod 3\))

\[F(a_0,a_1...a_n)_3 G(b_0,b_1...b_n)_3 \to Ans(a_0+b_0,a_1+b_1,...,a_n+b_n)_3 \]

我們不妨先枚舉\(a_1,a_2...a_n,b_1,b_2...b_n\)

\[F(a_0,x,y...z)_3 G(b_0,u,v...w)_3 \to Ans(a_0+b_0,x+u,y+v,...,z+w)_3 \]

我們此時只要對\(F,G\)的第一維做循環卷積就好了。

假設我們已經對\(F(a_0,x,y...z)\)\(G(b_0,u,v...w)\)的第一維做了\(DFT\)變換

此時我們要求:

\[F(X,x,y...z)_3 G(X,u,v...w)_3 \to Ans(X,x+u,y+v,...,z+w)_3 \]

然后再對 \(Ans\) 的第一維做\(IDFT\)變換

我們考慮求解它的一個子問題

\[F(X,x,y...z)_3 G(X,u,v...w)_3 \to Ans(X,x+u,y+v,...,z+w)_3 \]

即枚舉\(F,G\)的第一維,再枚舉\(F,G\)除第二維以后的后面幾維

\[F(X,a_1,x,y...z)_3 G(X,b_1,u,v...w)_3 \to Ans(X,a_1+b_1,x+u,y+v,...,z+w)_3 \]

我們發現這個形式和上面的形式差不多,我們此時再對\(F,G\)第二維做\(DFT\)變換,再解決一個子問題,再對\(Ans\)

第二維做\(IDFT\)變換

我們這樣遞歸下去,發現我們就是對\(F,G\)\(1 \to n\)維做\(DFT\)變換,再對\(F,G\) 對應的點值相乘,再做\(IDFT\)變換

偽代碼:

FWT(A),FWT(B)

for(i=0~(3^n)-1) A[i]*B[i]->Ans[i]

IFWT(Ans)

復雜度\(O(3^n n *3^2)\)

若將\(3\)換成\(d\),復雜度為\(O(d^n n* d^2)\)\(O(d^n n* d logd)\)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM