其实我不知道我是否真的理解了FFT,但是我会用FFT优化多项式乘法了QAQ。。
(以下大多摘自算导
前置知识
1. 多项式
在一个代数域F上,关于变量x的多项式定义为形式和形式表示的函数
A(x)=∑j=0n−1ajxj,其中a0…an−1为多项式各项的系数
2. 多项式的次数界
若多项式有非零系数的最高次项为xk,则称k为该多项式的次数,任何严格大于k的整数都是这个多项式的次数界。
3. 多项式的表示
(1)系数表示法
对于一个次数界为n的多项式A(x)来说,其系数表示法可以看做是一个列向量a=(a0,a1,…,an−1)。系数表示法对于某些多项式的计算很方便,如对多项式A(x)在给定点x0的求值运算就是计算A(x0)的值。如果使用霍纳法则,则求值运算的运行时间为O(n),
A(x0)=a0+x0(a1+x0(a2+...+x0(an−2+x0(an−1))...))
另外,加法运算的时间复杂度是O(n),暴力进行乘法运算的时间复杂度是O(n2)。
(2)点值表示法
有n个点(x0,A(x0),),(x1,A(x1)),..,(xn−1,A(n−1)),当所有xk各不相同时,这n个点可以唯一表示一个次数界为n的多项式,但是一个次数界为n的多项式可以有多个点值表示。通俗一点说,已知一个多项式函数的n个函数值可以唯一确定这个函数,而知道这个函数可以知道不止n个函数值。
已知点值表示求系数表示称为插值,用拉格朗日插值法可以做到O(n2)。
若次数界为n的多项式A(x),B(x)的n个点的xk是对应相同的,点值表示法的加法操作时间复杂度是O(n),只要把对应A/B(xk)相加即可,若A(x),B(x)都已知2n个点,那把A/B(xk)相乘同样可以在O(n)时间内完成乘法运算。。
进入正题。。
1. 单位复根
n次单位复根是满足

本文介绍了如何使用快速傅里叶变换(FFT)来优化多项式乘法,从单位复根、离散傅里叶变换(DFT)到快速傅里叶变换的原理和算法实现,详细阐述了FFT在计算DFT时的时间复杂度优势。
最低0.47元/天 解锁文章
1768

被折叠的 条评论
为什么被折叠?



