值表示操作
举例:两个二次多项式相乘使用点值法计算的操作:
总结:
给定两个系数表示的d阶多项式,计算两个多项式在2d+1点上的值。然后将函数值一一的相乘起来,得到最后多项式的数值。
最后,最后,我们将对应点的函数值,转换为系数表示,才能得到最后的C(X)表达式。
值表示的问题
如何将系数转换成值表示,以及如何将值表示成指数?
系数转换成值表示
传统的思想
多项式的次数是d,所以我们需要选取d+1个点带入到多项式的进行计算对应的函数值来表示点值。比如x从1取到d+1。这样的话计算的复杂度仍然和O(d^2)比没有优势。
总结:过于复杂。需要更加简单的计算
引入
偶函数
那么利用偶函数的性质,我们只需要取4个值即可。
奇函数
同理,在奇函数中,也是一半。
一般函数
所以这里,我们只需要将最后两个多项式,i取值1,2……n/2,就可以得到原多项式的n个值。
复杂度:T(n)=2T(n/2)+O(n) = O(nlogn)。
存在问题
引用复数
因为复数是平方之后,正负是成对出现的。
例1:
例2:
推广:
1的n次方跟可以被解释为复平面沿着单位圆等距排布的一系列点。
这些点的表示方法可以用欧拉公式写成复数。
不同的i取值实际上就代表了不同的单位复n次方根。
为什么n次方根就可以用于递归过程呢?
- 首先要求的点事成正负对子出现的,这里 w^(j+n/2)= -w^j 正好是一对。
- 奇偶函数的分布,下图表现了平方之后的再复平面上分布的情况。
上图表现了,平方之后,正好得到了n/2个n/2次方根,他们是正负配对的,可以实现完美的递归。
再次平方,就得到了n/4个n/4次方根,适用于下一层的递归。最终只剩下一个点。
值表示转化为系数
将求值表示为矩阵向量的乘积。
转化为DFT形式:
FFT形式就是DFT和向量乘法的算法。
那么插值就是DFT矩阵求逆。给定位置的函数值,计算函数的系数。
总结FFT和IFFT
原根的这几个性质:
多项式在nlogn的时间内表示成点值表示法:
参考:
- https://www.bilibili.com/video/BV1za411F76U/?spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=d49b9f9f9975e09b9a2a18423540d91a
- https://www.bilibili.com/video/BV1eT411M7Fp/?spm_id_from=333.880.my_history.page.click&vd_source=d49b9f9f9975e09b9a2a18423540d91a
- https://zhuanlan.zhihu.com/p/374489378 (蝶形变换讲的很好)