FWT 學習筆記

概念

類似多項式卷積,把下標相加換成下標做位運算,同樣可以在O(nlogn)O(nlogn)的效率內求出。

思想

或和與比較簡單,重點考慮異或。

對於異或卷積,構造FWT(A)[i]=j=02n1(1)bitcount(iandj)FWT(A)[i]=\sum_{j=0}^{2^n-1}{(-1)^{bitcount(i and j)}}

如果已知AA,我們可以用遞歸的方式計算FWT(A):FWT(A)=(FWT(A0)+FWT(A1),FWT(A0)FWT(A1))FWT(A):FWT(A)=(FWT(A_0)+FWT(A_1),FWT(A_0)-FWT(A_1)),其中A0A_0A1A_1分別表示AA的前2n12^{n-1}位和後2n12^{n-1}位,效率O(nlogn)O(nlogn)

可以利用上面式子,用歸納法證明FWT(AxorB)=FWT(A)×FWT(B)FWT(A xor B)=FWT(A) \times FWT(B)

於是我們只需要對ABA,B分別做FWTFWT,把對應位置相乘,即可得到FWT(AxorB)FWT(A xor B),剩下的問題是如何把它變爲原來的(AxorB)(A xor B)

還是考慮遞歸,把上面的式子逆過來得到
IFWT(A)=((IFWT(A0)+IFWT(A1))/2,(IFWT(A0)IFWT(A1))/2)IFWT(A)=((IFWT(A_0)+IFWT(A_1))/2,(IFWT(A_0)-IFWT(A_1))/2)
同樣可以在O(nlogn)O(nlogn)時間內算出。

例題

DTOJ 4875. 西行寺無餘涅槃

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章