分治FFT小記?

CharlieVinnie發表於2022-01-30

分治FFT:在 $O(n \log^2 n)$ 的時間內求出類似於 $f_i=\sum\limits_{j=0}^{i-1}g(i-j)f(j)$ 之類的遞推式

思想:同 CDQ 分治的思想,先分成左半邊和右半邊,先處理左半邊,然後計算左半邊對右半邊的影響,最後處理右半邊。

 

注意事項:

1. 不是所有這樣的式子都可以用多項式求逆等解決,很多還是要用分治FFT的

2. 式子末尾帶的常數需要一開始在分治前就設好

3. 千萬不要每次都做長度為 $n$ 的卷積(動動腦子),看看下面的公式:$f'(i)=\sum\limits_{j=l}^{mid}f(j)g(i-j)$

 就是 $f$ 的 $[l,mid]$ 項與 $g$ 的 $[1,r]$ 項做卷積(注意 $i$ 的範圍為 $[mid+1,r]$),於是將 $f$ 往下平移 $l$,$g$ 往下平移 $1$,做一個長度為 $r-l-1$ 的卷積(但是程式碼中寫 FFT 時要寫 $r-l$),然後回移 $l+1$ 位即可!

4. 如果 $g(i-j)$ 前還帶有隻與 $i$ 有關的式子,加的時候處理一下即可。

相關文章