fft可用於解決一些卷積問題。
一般問題形式如下: c=
a∗b
c[i]
=∑ij
=0a[
i]∗b
[i−j
] 若把a,b看成兩個次數為n多項式 a(
x)=∑
ni=0
a[i]
∗xi,
b(x)
=∑ni
=0b[
i]∗x
i 原問題等於兩個多項式相乘,c的次數等於2n-1
乙個次數界為n的多項式a的點值表達為n個點值對所組成的集合。形如
其中yi=a(xi),x各不相同。
插值運算為點值運算的逆運算,如果給定乙個n個點值對的點值表達,我們可以確定唯一乙個次數界為n的多項式。
對於多項式乘法,
我們可以求出a的點值表達和b的點值表達
則c的點值表達為
再通過插值運算,則可求出c的每一項的係數。
直接暴力,複雜度是o(n^2)的,fft的關鍵就在於x的選取。
形如a+bi(i=
−1−−
−√)
如果建立平面直角座標系,a作為x座標,b作為y座標,我們可以用乙個點對(a,b)來表示乙個複數,也相當於乙個平面向量。
用三角函式簡單推導,可以發現,複數乘法得到的新向量的模長等於原向量的模長之積,與x軸的夾角等於原向量的夾角之和。
n次單位複數根是滿足wn
=1的複數w 且w
1 ~wn
把平面均勻的分成n份 記w
為主n次單位複數根,則w=(cos(2π
/n),sin(2π
/n)) wi
=wi−
1∗w=
(cos
(2iπ
/n),sin(2i
π/n)
) 為了區分其他次單位複數根,我們添乙個下標來表示(wi
n )wd
kdn=
wkn
wdkd
n=(c
os(2
dkπ/
(dn)
),si
n(2d
kπ/(
dn))
)=(c
os(2
kπ/n
),si
n(2k
π/n)
)=wk
n 2n次單位複數根的平方的集合,等於n次單位複數根的集合。
易知對於任意乙個<=n的k,存在唯一乙個<=n的k』滿足wk
n=−w
k′n
(wk2
n)2=
(wk′
2n)2
=wkn
k!=0,n>0時∑n
−1i=
0wki
n=0
相當於等比數列求和,∑n
−1i=
0wki
n=(w
knn−
w0n)
/(wk
−1)=
0 為了方便,我們只考慮次數n=2^k的多項式乘法
如何求出單個數x的函式值a(x)?我們定義兩個多項式 a0
(x)=
a0+a
2x+a
4x2⋅
⋅⋅an
−2xn
/2 a
1(x)
=a1+
a3x+
a5x2
⋅⋅⋅a
n−1x
n/2
a(x)
=a0(
x2)+
x∗a1
(x2)
原問題:求a(x)在n次單位複數根上的函式值。
轉化成:求a0(x)和a1(x)在n/2次單位複數根上的值。
於是可以遞迴地對n/2的多項式a0(x)與a1(x)在n/2個n/2次單位複數根進行求值。
插值運算
如果把點值運算寫成矩陣方程的形式,可以得到表示式y=
vn∗a
。 那麼插值運算相當於求a,a=
v−1n
∗y
結論,v−1
n[j,
k]=w
−jkn
/n.
證明:[vn
∗v−1
n][j
,j']
=∑n−
1i=0
w(j'
−j)i
n/n ,如果j』=j,那後面為1,否則根據求和引理,為0。
如何把空間複雜度降為o(n)呢?
不好講,詳見**吧…
struct z
}c[maxn],d[maxn],g[maxn],a[maxn],b[maxn],an[maxn];
z operator *(z a,z b)
z operator +(z a,z b)
z operator -(z a,z b)
void dft(ar *a,int sig)
}}fo(i,0,l-1)a[i]=g[i];
if (sig<0) fo(i,0,l-1) a[i].x/=l;
}void fft()
void chu()
}
FFT學習筆記
今天doggu講了,開始覺得這玩意好強啊 後來自己看的時候發現蠻zz wys表示 贊同 所以很多自己覺得遙不可及,一輩子都不可能學會的東西只要慢慢理解,理解好了再把他化為自己的語言,歸到自己的世界裡 就覺得不是很難了,甚至很簡單.當然開始並不是,從 好難啊 到 這麼簡單困大爺我這麼久,之前腦子抽了z...
FFT 學習筆記
f x sum limits a i x i x 0,f x 0 x 1,f x 1 x f x 首先我們要了解複數 即 i sqrt 乙個數有實部和虛部 即 a x y i x,y 原來的實數運算相當於在乙個一維數軸上進行移動,複數則是在二維平面上運動 一句話來說就是摸長相乘,幅角相加 c 中提供...
FFT學習筆記
fft學習筆記 fft,快速傅利葉變換,是一種在 o n log n 的時間內計算兩個多項式乘積的演算法。沒學過的請自行翻閱高中數學選修2 2。給出乙個多項式 f x a 0 a 1x a 2x 2 a nx n 係數表示法 就是用乙個係數序列來表達多項式,顯然係數序列和多項式是一一對應的。f x ...