[FFT] 快速傅立葉變換學習筆記
原文:https://blog.csdn.net/herano/article/details/71213373
-1、為什麼學 FFT
退役(很早)之前聽說 FFT 很神(e)奇(xin),Po姐來講的時候也是膜(sha)了(ye)一(bu)發(dong),於是就放那裡了。退役之後有(xian)了(de)時(mei)間(shi),並且在籃球賽之前立了贏一場的 flag 否則學FFT結果又雙叒叕全輸了,於是下面就是成果了……網上 FFT 講解多得是不看也罷……
0、什麼是 FFT?為什麼 FFT?
0.1、為什麼 FFT?
從一個簡單問題說起:大整數乘法。在做 VijosP2000 的時候,看資料範圍
0.2、什麼是 FFT?
FFT(Fast Fourier Transform),全名快速傅立葉變換,這與傅立葉變換只有半毛錢的關係,傅立葉變換是分析波的成分的方法,通過推廣傅立葉變換得到了優化的快速傅立葉變換,為了展示區別和聯絡,下面是傅立葉變換和傅立葉逆變換的公式:
傅立葉變換:
然後,我們終於可以開始講 FFT 了……
1 、(初中知識)多項式
1.1、定義
我們把形如 a0+a1x+a2x2+⋯+an−1xn−1a0+a1x+a2x2+⋯+an−1xn−1 等類似形式表示。
1.2、多項式的兩種表示法
1.2.1、係數表示法
我們知道,向量是個好東西(蛤?),矩陣也是個好東西(蛤?),於是我們把三者結合起來看(蛤玩意?)。
我們將 n−1n−1
1.2.2、點值表示法
我們把多項式 A(x)A(x) 的點值表示。
到這裡,是不是差不多忘了要幹什麼了……
1.3、多項式的運算
1.3.1、多項式求值
這個比較簡單,拿題說。這是我還沒出也不想出的一道題,拿出來娛樂一下……
題目描述 Description
都知道 FZ 醬數學不好,數學老師很著急,於是讓她求個多項式的值。但是數學老師一不小心資料就出大了,他卻並沒有注意到這一點。老師共出了 TT 道題就崩潰了,請幫她儘快完成作業。
輸入 Input
第一行一個整數 TT。
輸出 Output
對於每組資料,輸出一行,為答案。
樣例輸入 Sample Input
2
2
3 2
100
3
1 2 3
-9
樣例輸出 Sample Output
203
226
樣例解釋 Explanation
對於第一個多項式為 A(x)=2x+3A(x)=2x+3。
限制 Limits
對於 50%50% 位。
那麼很好我們必須寫高精度了……
2128−1≈3.4×10382128−1≈3.4×1038。
1.3.1.1、方法一:O(pn2)→50ptsO(pn2)→50pts
暴力不會嗎?
核心程式碼如下:
1.3.1.2、方法二:O(p2nlog2n)→[50,80]ptsO(p2nlog2n)→[50,80]pts
這裡挨個乘太慢了,快速冪處理會快一些。
(其實不一定會快多少)
核心程式碼如下:
1.3.1.3、方法三:O(p2n)→100ptsO(p2n)→100pts
學過必修三嗎?
學過必修三還不會?
拿出數學必修三翻到 37 頁你看到了什麼?
秦九韶演算法可以大量減少乘法和加法次數,並且把運算量簡化為 O(n)O(n) 的。
核心程式碼如下:
不過沒上面的優雅不是嗎……(呵呵)
回到正題上,我們要談的其實是……
1.3.2、多項式的加法和乘法
1.3.2.1、多項式加法
沒啥難度,直接加即可:
1.3.2.2、多項式乘法
這就是個開括號的問題……
兩個次數界為 na,nbna,nb 就可以知道了。