DFT主要其实就解决了一个问题,如何快速的求出两个多项式的乘积
设多项式A,B
A=ak*x^(k-1)+...a0*x^0
B=bk*x^(k-1)+...b0*x^0
最直接的方法:
我们求A×B会花费O(n^2)的时间复杂度
但是如果用点值来表示多项式的话,只需要O(n)的复杂度
点值表示:
对于n次多项式,用n个点来表示,(x1,y1)...(xn-1,yn-1)
任两点间的连线不与y轴垂直
yk=f(xk)
可以证明两者是等价的
所以只需要知道两者之间的转换就可以了
从一般多项式到点值表示:
此时可以将x1,。。。xn-1选为1的n个复数根
这时:
yk=y0k(x^2)+x*y0k(x^2)
而x^2中有两个是相同的
此时分治即可
从点值形式到一般表示:
此时任然选择上面的n个x值,Y=T*x
这是上面的过程的矩阵形式,T是一个范德蒙德行列式,它在这种情况下的逆矩阵,可以直接用数学公式求得