FFT 快速傅利葉變換 演算法學習筆記

2021-07-16 14:38:13 字數 2403 閱讀 1199

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 如果要求他們的積,則需...