在FFT问题里面,我们遇到的问题是多项式单点求值和其逆运算。我们找到多个自变量,代入多项式中,然后将对应的结果值相乘,然后通过逆运算反推结果多项式的结构,其中,通过多项式上的点推出多项式的系数,我们使用拉格朗日插值,但是这个公式和线性代数之间有什么联系吗:
fi(x)=yii=j∏xj−xix−xi,f(x)=∑fi(x)
其本质就是:给你一个范德蒙德矩阵:
A=⎣⎢⎢⎢⎢⎢⎡1x0x02⋮x0n1x1x12⋮x1n1x2x22⋮x2n⋯⋯⋯⋱⋯1xnxn2⋮xnn⎦⎥⎥⎥⎥⎥⎤
然后给你结果的矩阵:
y=⎣⎢⎢⎢⎡y0y1⋮yn⎦⎥⎥⎥⎤
问系数矩阵 a,使得 aA=y。于是我们的任务就是求 A−1。从拉格朗日插值的角度考虑,(A−1)ij=[xj−1]∏k=ixi−xkx−xk。当然我们也可以用伴随矩阵算出 A−1,但是比较复杂。
当 A=V(ωn0,ωn1,ωn2,⋯,ωnn−1),这种情况比较简单就可以求出逆矩阵,下面我们验证 A−1=n1V(ωn0,ωn−1,ωn−2,⋯,ωn−n+1)。这个等价于验证:(AV(ωn0,ωn−1,ωn−2,⋯,ωn−n+1))ij=nδi,j:
(A2)ij=k=0∑n−1(ωni)k(ωn−k)j=(k=0∑n−1ωnk(i−j))
众所周知,i−j=0 时上式的值为 n,否则值为 0。
FWT 问题操作的下标都可以表示为若干个向量按顺序组成的向量序列,我们可以证明,FWT 问题操作的各个向量都是独立的,于是问题转化为对每个位置上的向量该如何操作。在这种问题中,我们最常遇到的就是范德蒙德矩阵。范德蒙德矩阵自然也有其意义,表示将 x1,x2,⋯,xn 代入多项式中,计算出多项式的值,所以求得范德蒙德矩阵的逆矩阵自然对应求解对应多项式的过程。
⎣⎢⎢⎢⎢⎢⎢⎡111⋮11ωp1ωp2⋮ωpp−11ωp2ωp4⋮ωp2(p−1)⋯⋯⋯⋱⋯1ωpp−1wp2(p−1)⋮ωp(p−1)(p−1)⎦⎥⎥⎥⎥⎥⎥⎤