Processing math: 100%

倍增FFT

已知关于 x 的多项式 ki=1(x+i) 的各项系数,欲求 2ki=k+1(x+i) 的各项系数.

做法

F(x)=ki=1(x+i)=ki=0cixi,G(x)=2ki=k+1(x+i) ,则
G(x)=F(x+k)=ki=0ci(x+k)i=ki=0ciij=0(ij)kijxj=kj=0kjj!xjki=j(cikii!)1(ij)!

对着系数稍微构造一下向量 a,b 就可以得到
G(x)=kj=0kjj!xj2ki=0aibj+ki
于是对 a,b 做一次卷积即可算出 G(x) 的各项系数,时间复杂度 O(klogk) .

应用

求多项式 F(x)=ni=1(x+i) 的各项系数.

若直接用分治 FFT 求解, 时间复杂度 O(nlog2n) .

考虑像快速幂那样倍增去做,记 m=n2 .

先求出 mi=1(x+i) 的各项系数,用上面的做法 O(mlogm) 推出 2mi=m+1(x+i) 的各项系数.

O(mlogm) 将它们乘起来得到 2mi=1(x+i) 的各项系数,若 n 为奇数,再暴力乘上 (x+n) 这个单项式.

时间复杂度 T(n)=T(n2)+O(nlogn)=O(nlogn) .

Related Issues not found

Please contact @jkloverdcoi to initialize the comment