多项式乘法入门
By SemiWaker
这是一篇蒟蒻对FFT、DFT、CZT、NTT的弱鸡理解
多项式
a0x+a1x1+a2x2⋯+an−1xn−1
上面的这个形式叫做多项式。
系数: a0..n−1
项: aixi
界:n
为了方便我们系数序列就可以表示多项式。
线性卷积
A×B=∑i=02n−2(∑j=0iAjBi−j)xi
简单来说,就是把两个多项式直接乘起来。
第i项的构成如下:
任取两个项 Ajxj 和 Bkxk ,如果 j+k=i ,那么得到 AjBkxi 。
将所有 j+k=i 的项系数两两相乘加起来即可。
循环卷积
A×B=∑i=0n−1(∑j,kAjBk[j+k≡i(modn)])xi
比较难理解。
其实就是把多项式的-1项设为n-1项,-2项设为n-2项……
然后,线性卷积为了防止出现-1项,设定了j<=i,现在我们把它去掉。
A×B=∑i=0n−1(∑j=0n−1AjBi−j)xi
线性卷积和循环卷积关系
我们用比较形象地方式说明。
举个例子
(1+2x+3x2+4x3)×(5+6x+7x2+8x4)
即 (1,2,3,4)×(5,6,7,8)
线性卷积:
循环卷积
如果把 (5,6,7,8) 复制展开
然后我们观察,设线性卷积的结果为 C0...6 ,循环卷积的结果为 D0..3
则有:
D0=C0+C4
D1=C1+C5
D2=C2+C6
D3=C3
也就是说,把线性卷积重叠在一起,就得到了循环卷积。
多项式点值表示
我们把N个数 x0..n−1 带入x,可以得到多项式的N个值 A(x0..n−1) 。
将每一个数和对应的值当成一个点 (xi