本文來自轉載:
FFT演算法學習筆記 Posted on July 14, 2015 by gatevin
寫在前面
關於學習FFT演算法的資料個人最推薦的還是演算法導論上的第30章(第三版), 多項式與快速傅裡葉變換, 基礎知識都講得很全面
這篇文章即是博主在閱讀FFT演算法的相關學習資料之後的一些總結, 作為日後複習查閱的材料來源, 同時也可以作為讀者學習FFT演算法的一份資料
FFT演算法基本概念
FFT(FastFourierTransformation) 即快速傅裡葉變換, 是離散傅裡葉變換的加速演算法, 可以在 O(nlogn) 的時間裡完成 DFT , 利用相似性也可以在同樣複雜度的時間裡完成逆 DFT
DFT(DiscreteFourierTransform)
即離散傅裡葉變換, 這裡主要就是多項式的係數向量轉換成點值表示的過程
在ACM-ICPC競賽中, FFT演算法常被用來為多項式乘法加速, 即在 O(nlogn)
複雜度內完成多項式乘法, 當然實際應用不僅僅限於這些, 時常出現需要構造多項式相乘來進行計數的問題, 也需要用FFT演算法來解決, 相關的幾個問題在本文中也會提及
FFT演算法需要的基礎數學知識
多項式相關:
多項式相關的定義:一個以 x 為變數的多項式定義在代數域F上, 將函數 A(x)
表示為形式和 Σj=0n−1ajxj , 稱 aj 為係數, 所有係數屬於代數域 F , 如果一個多項式的最高非零係數是 ak , 那麼成這個多項式的 次數是 k , 記做 degree(A)=k , 任何一個嚴格大於一個多項式次數的整數都是該多項式的 次數界
關於多項式的加法和乘法相信看到這篇部落格的讀者都會最基本的中學的演算法, 在計算的時候, 如果採用傳統的中學的計算方法, 多項式加法的時間複雜度是 O(n) , 乘法的時間複雜度是 O(n2)
(n是兩個多項式A和B的次數).
多項式的表示
在平常的學習中, 最常見的是多項式的係數表達方式,
次數界為n的多項式 A(x)=a