ff
t(fa
stfo
urie
rtra
nsfo
rmat
ion)
即快速傅利葉變換,是df
t 的加速演算法,利用單位複數根的特殊性質,可以在θ(
nlog
n)的時間內算出df
t ,利用相似性可以在同樣的複雜度完成逆運算 df
t(di
scre
tefo
urie
rtra
nsfo
rmat
ion)
即離散傅利葉變換,將係數向量轉換成單位複數根處點值表示的過程。
在中學數學中,多項式相加的時間複雜度是o(
n),相乘複雜度是o(
n2) (即兩個表示式各項相乘),fft演算法用來加速多項式乘法,使得多項式乘法可以在o(
nlog
n)的時間複雜度內完成,acm-icpc中還有一些構造多項式計數的問題也可以用fft加速。
乙個以x
為變數的多項式定義在乙個代數域
f上,將行數a(
x)表示為形式和: ∑j
=0n−
1ajx
j 我們稱a
j 為多項式係數,aj
∈f,典型的
f 就是複數集合
c。如果乙個多項式的最高非零係數是ak
,,那麼成這個多項式的次數是
k ,記做de
gree
(a)=
k,任何乙個嚴格大於乙個多項式次數的整數都是該多項式的次數界。
係數表達
即常見的表達方式,對於∑n
−1j=
0ajx
j 而言,其係數表達是乙個由係數組成的向量a=
(a0,
a1,a
2,⋯,
an−1
,an)
。對於一
些運算,
係數表達
式十分方
便,例如
對 a(x)在給
定定點 x_0$處求值,使用秦九韶演算法,我們可以在θ(
n)的時間複雜度內完成。 a(
x0)=
a0+x
0(a1
+x0(
a2+⋯
+x0(
an−2
+x0(
an−1
))⋯)
) 但考慮多項式乘法時,採用中學時的辦法,複雜度達到了θ(
n2)
點值表達
乙個次數界為
n 的多項式a(
n)的點值表達就是乙個由
n 個點值對組成的集合
使得對任意的整數k=
0,1,
..n−
1 各不相同, 且yk
=a(x
k)。
乙個多項式可以有很多不同的點值表達,因為可以採用
n 個不同的點構成的集合作為這種表達的基。求值(係數表達
⇒點值表達)
乙個顯然的辦法就是,選取
n 個不同的點,依次運用秦九韶演算法求出值,時間複雜度為θ(
n2)。
稍後可以得到,如果巧妙選點(即利用單位複數根的特殊性質),可以將複雜度降至θ(
nlog
n)。插值(點值表達
⇒ 係數表達)
根據演算法導論定理30.1(插值的唯一性)證明,當插值多項式的次數界等於已知的點值對的數目,插值才是明確的。
單位複數根
n 次單位複數根指的是滿足ωn
=1的所有複數
ω ,
n 次單位複數根剛好有
n個,他們是e2
kπni
, 其中
i 是複數單位,k=
0,1,
2...n−
1,在復平面上這
n 個根均勻的分布在半徑為
1的圓上,關於複數指數的定義如下: eu
i=co
s(u)
+sin
(u)i
其中ωn
=e2i
πn倍稱為主
n 次單位根。
消去引理
折半引理
求和引理fft演算法學習筆記
演算法導論(第二版)
快速傅利葉變換FFT
fft的作用就不多說了,搞訊號處理的人都會用上。fft的由來 傅利葉變換ft 離散傅利葉變換dft 快速傅利葉變換fft。學習資料 1 陳後金的 數字訊號處理 裡面深入淺出,該有的公式都有,程式設計思想也有。2 一篇系統講述傅利葉變換的帖子 3 學生對fft的理解 4 工程人員對fft的簡單明瞭的總...
快速傅利葉變換 FFT
bzoj 2179 fft快速傅利葉 果題 bzoj2194 請計算c k sigma a i b i k 其中 k i n 並且有 n 10 5。a,b中的元素均為小於等於100的非負整數。注意到i 和 i k有奇妙的聯絡 不妨嘗試把b翻轉 然後就變成卷積了。貼個模板 include define...
快速傅利葉變換 FFT
首先說一下我用fft做什麼,我要做的是多項式乘法,或者說,加速多項式乘法。考慮多項式a x j 0n 1aj xj,它一共有 n 項,我們稱它的次數界為 n。假設我們有兩個次數界為 n 的多項式a x 和b x 要求它們的和是非常簡單的,只需要將對應的係數相加,複雜度為o n 如果要求他們的積,則需...