@TaoSama
2016-09-10T00:38:53.000000Z
字数 7749
阅读 5455
形如
其中称为多项式的系数, 是未知数
未知数的最高次数称为多项式的次数,次数称为多项式的次数界, 即多项式的次数小于次数界
记多项式,即:
多项式值的计算
可利用霍纳法则(又名秦九韶算法)在时间复杂度完成
将次多项式的系数, 看作一个维列向量, 即:
选取个不同的数对多项式进行求值,得到
那么就称为多项式的点值表示
加法
如果和是次数界为的多项式,那么和也是一个次数界为的多项式,也就是说:
乘法
如果和分别是次数界为和的多项式,那么积是一个次数界为的多项式,
也就是说:
求值计算的逆(从一个多项式的点值表示确定其系数表示)称为插值
插值多项式的唯一性:
对于任意个不同点值对组成的集合,其中所有的都不同,那么存在唯一的次数界为的对应的多项式
插值的计算方法
观察下面这个矩阵表达式,它通过系数表达式计算出了点值表达式
计算逆矩阵和矩阵乘法的时间复杂度都是的,这样是不行的
现在就是大展神威的时刻了,通过选定特定的值来使得系数表达式和点值表达式之间相互计算
观察这些次单位复数根, ,且这个点的是均匀地分配在这个区间内的
在复平面中, 的意义相当于这个复数逆时针旋转了的角度
这个单位复数根将复平面均匀地分成了个部分,每部分弧度为
所以这个单位复数根各不相同
个次单位复数根在乘法意义下形成了一个群
因为(可通过共轭复数的性质推导)
最常见的算法是 Cooley-Tukey 算法,它的基本思路在 1965 年由 J. W. Cooley 和 J. W. Tukey 提出的
它是一个基于分治策略的算法
虽然前面说的第一步将次数界加倍, 但是下面讲解过程仍将多项式次数界看作
将个次单位根代入将其转换成点值表达:
这个递归计算的时间复杂度,
伪代码:
function RECURSIVE-FFT(a) n = a.length if n == 1 return a wn = e^(2*pi*i/n) w = 1 a0 = (a_0,a_2,...,a_n-2) a1 = (a_1,a_3,...,a_n-1) y0 = RECURSIVE-FFT(a0) y1 = RECURSIVE-FFT(a1) for k = 0 to n/2-1 y[k] = y0[k] + w * y1[k] y[k+n/2] = y0[k] - w * y1[k] w = w * wn