问题:给出两个多项式A=a0+a1x+a2x^2+......+anx^n;B=b0+b1x+b2x^2+......+bnx^n;求C=A*B。
可知:c(i)=sigma(a(i)*b(k-i)),我们称之为卷积,对卷积暴力求解的复杂度为O(n^2),FFT可降低到O(nlogn)。
通过补零操作可以将ABC三个多项式都统一为n-1次多项式
一、点值表示
如果x0,x1,x2......xn-1为互不相同的n个数,且A在xi处取值为yi,B在xi处取值为yi'。那么c在xi处的取值为yi*yi'。
两个点确定一次函数,三个点确定二次函数,那么n个点可以确定一个n-1次函数。
可用矩阵形式表示为:
1 x0 x0^2 ......x0^n a0 y0
1 x1 x1^2 ......x1^n * a1 = y1
1 xn xn^2 ......xn^n an y2
前面的矩阵叫做范德蒙矩阵行列式的值为pai(xk-xj)(0<=j<k<=n),所以如果xj与xk不相等的话行列式的值不为零;
如果该矩阵行列式的值不为零的话,则该矩阵存在逆矩阵。
1 x0 x0^2 ......x0^n -1 y0 a0
1 x1 x1^2 ......x1^n * y1 = a1
1 xn xn^2 ......xn^n yn a2
这个过程叫做插值,所以我们可以先DFT求出A,B的点值表示再用插值求出C的系数,