法法塔!【fft&fwt】

法法塔大法好ww

窝太菜了TAT,写着玩,表喷ww

FFT

Ci=AjBij

多项式两种表示方法:点值表示法、系数表示法
如果用点值表示法的话,那么乘法就是 O(n)

FFT就是把系数表示变为点值表示,相乘后再变回系数表示,并且可以做到 O(nlogn)

单位复根: w[n] ,即 (w[n])n=1
窝们将 (w[n])k 记为 w[n]k

这里取的点就是 w[n]0,w[n]1,,w[n]n1

FFT : yk=n1i=0ai(w[n]k)i
FFT 1 : ak=1nn1i=0yi(w[n]k)i
所以做IFFT的时候就只要用 w[n]k 来替换 w[n]k 就好了QAQ

考虑如何求得 yi

y[0](x)=a0+a2x++an2xn22
y[1](x)=a1+a3x++an1xn22

y=y[0](x2)+xy[1](x2)
可以得到
yk=y[0]k+w[n]ky[1]k
yk+n2=y[0]kw[n]ky[1]k

然后就可以分治搞了嘤QAQ

将变换后的系数用二进制表示,发现就是0,1,2,…n-1的倒序,所以就可以变了啊QAQ

FWT

Ci=jk=iAjBk

代表一个位运算符)

同样考虑构造一种变换方式使得A、B能直接相乘

既然是位运算,那么每一位相互独立。。。

下一步当然是%pls辣ovo

异或

tf(A)=(tf(A0)+tf(A1)),tf(A0)tf(A1))utf(A)=(utf(A0+A12),utf(A0A12))


tf(A)=(tf(A0)+tf(A1),tf(A1))utf(A)=(utf(A0)utf(A1),utf(A1))


tf(A)=(tf(A0),tf(A1)+tf(A0))utf(A)=(utf(A0),utf(A1)utf(A0))

至于板子么。。当然是A+B啦!23333

你可能感兴趣的:(数学其他)