學習筆雞 快速沃爾什變換FWT

2022-02-23 18:45:50 字數 2369 閱讀 6511

快速解決:

\[c[i]=\sum_ a[j]b[k]

\]fwt使得我們

\[fwt(c)=fwt(a)*fwt(b)

\]其中\(*\)是點積,就是對應位置乘起來。

而對於\(orfwt\),

\[c'[i]=fwt(c)[i]=\sum_c[j]

\]那麼證明一下:

\[\begin

&c'[i]&=\sum_ c[j]

\\&=\sum_\sum_ a[p]b[k]

\\&=\sum_ a[p]b[k]

\\&=\sum_ a[p]\sum_b[k]

\\&=a'[i]b'[i]

\end

\]考慮\(a\)和\(a'\)的關係,其中\(a_0,a_1\)分別代表\(a\)的前\(2^\)和後這麼多項(下標都從0開始)。他們的差別是\(2^\)位上的不同。其他相似。

\[fwt(a)=

\begin

fwt(a_0),fwt(a_1+a_0) & k>0

\\a & k=0

\end

\]逗號表示依次連線。

複雜度\(t(n)=2t(n/2)+t(n)=o(n\log n)\),而一般來說\(n=2^m\)那麼就是\(o(m2^m)\)

考慮\(ifwt\)

照貓畫虎即可

\[ifwt(a')=

\begin

ifwt(a'_0),ifwt(a'_1-a'_0) & k>0

\\a' & k=0

\end

\]**

inline void fwt_or(int*a,const int&tag,const int&len)a[j]b[k]

\]可以構造\(c'[i]=fwt(c)[i]=\sum_\limits c[j]\),至於為什麼構造,這個\(j\&k=i\)可以看做\(i\)是\(j,k\)的子集。

同樣有\[fwt(c)=fwt(a)*fwt(b)

\]證明:

\[\begin

&c'[i]&=\sum_ c[j]

\\&= \sum_ \sum_a[k]b[p]

\\&= \sum_a[k]b[p]

\\&= \sum_a[k]\sum_b[p]

\\&=a'[i]b'[i]

\end

\]同樣地

\[fwt(a)=

\begin

fwt(a_0+a_1),fwt(a_1)&k>0

\\a&k=0

\end

\]同樣的\(t(n)=o(m2^m)\)

同樣地\[ifwt(a')=

\begin

ifwt(a'_0-a'_1),ifwt(a_1) &k>0

\\a'&k=0

\end

\]同樣地

inline void fwt_and(int*a,const int&tag,const int&len)a[j]b[k]

\]這裡\(fwt(x)\)貌似沒有很直觀的意義了,推式子的話其實也能理解

\[fwt(c)=fwt(a)*fwt(b)

\]這裡記錄乙個符號\(a\oplus b=c\)

那麼\(c=a\oplus b\)

拆成前後兩半

\[c_0=a_0\oplus b_0+a_1\oplus b_1

\\c_1=a_0\oplus b_1+a_1\oplus b_0\]令

\[x_0=(a_0+a_1)\oplus (b_0+b_1)

\\x_1=(a_0-a_1)\oplus (b_0-b_1)

\]然後?

\[c_0=

\\c_1=

\]但是好像學這個無法和各路大佬進行交流,並且我好像並沒有學會,那麼...

\[fwt(a)=\begin(fwt(a_0)+fwt(a_1),fwt(a_0)-fwt(a_1)) & n>0\\a & n=0\end

\]用迴圈實現的技巧和ntt一致,控制長度,控制第幾段,控制段內的迴圈變數

//@winlere

#include#include#include#includeusing namespace std; typedef long long ll;

inline int qr()

const int maxn=1<<18|1;

const int mod=998244353;

inline void fwt_or(int*a,const int&len,const int&tag)

}int n,k;

int a[maxn],b[maxn],c[maxn];

int a[maxn],b[maxn];

int main()

學習筆記 FWT 快速沃爾什變換

解決涉及子集配湊的卷積問題 就是解決一類問題 f k sum a i b j 基本思想和fft類似。首先轉化成為另乙個多項式 fwt a fwt b 使得 fwt a oplus b fwt a fwt b 這裡,是按位乘。這個是 o n 的。然後,再 ifwt 回去即可。類似於,直接過馬路不好走。...

學習筆記 快速沃爾什變換 FWT

目錄2.按位與卷積 3.按位異或卷積 4.高維前 字尾和與各類卷積的聯絡 5.題目小結 想要快速計算 c k a textb k sum j k a ib j 我們可以利用 mathtt 的思想 將係數多項式轉化成點值多項式,mathcal o n 求得答案後將其還原成係數多項式。假設 a,b 均為...

FFT 快速傅利葉變換 FWT 快速沃爾什變換

實在是 美麗的數學啊 關於傅利葉變換的部落格 講的很細緻 非常易於理解 大概能明白傅利葉變換是幹嗎的了 但是還是不能明白為什麼用傅利葉變換來算多項式求和 在多項式中,dft就是係數表式轉換成點值表示的過程。我們熟知的是多項式的係數表示法,通過給定一組 來確定乙個唯一的多項式 而多項式還可以有另一種表...