分治FFT小记🐤

分治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$ 有关的式子,加的时候处理一下即可。

posted @ 2022-01-30 22:06  CharlieVinnie  阅读(62)  评论(0编辑  收藏  举报