3_多项式乘法

12.多项式相乘,以及快速傅里叶变换

由于两个n次多项式相乘复杂度为n^2过高,本章讨论如何将复杂度降至n*log(n)

记号

多项式A(X)=/sum^{n-1}_{j=0}{a_j*x^j}

C(X) = A(X) * B(X)

也即

A(X) * B(X) = c0 + c1*x + c2 * x^2 + ... c_n * x ^n

c_j = /sum^j_{k=0}{a_k*b_{j-k}}

a_k,b_k当k在[0,n-1]才非0

也即积的系数是乘数被乘数的系数的卷积,convolution

多项式的表示法

1. 系数法

Horner法则

A(x_0) = a_0 + x_0 * (a_1 + x_0 *(...+ a_{n-1} * x_0))

2. 点值表示法

使用n个点值对表示多项式

{(x0,y1),...,(x_{n-1},y_{n=1})}

由Horner法则,系数表示法复杂度为n^2

从点值表示法到系数表示法

对于任意的点值表示法集合, 存在唯一的n次多项式,A(x)满足y_k=A(x_k)

范得蒙矩阵

利用拉格朗日插值公式,可以在平方复杂度内完成

点值法用途

加法可以直接加和

乘法可以直接相乘

离散傅里叶变换

n次单位复根恰好有n个,均匀分布在单位圆上

Wn = e^{2pie/n}为主n次单位根,其它的根均为主单位根的幂

n个n次单位根Wn^0,...Wn^{n-1}在乘法运算下构成一个群

引理

相消引理 w_{dn}^{dk}=Wn^k

Wn^{n/2} = -1 当n为偶数