快速傅里叶变换与快速数论变换

拉格朗日插值法与牛顿插值多项式
中有说明当给定n+1个点值序列 ( x 0 , y 0 ) , ( x 1 , y 1 ) , ⋅ ⋅ ⋅ , ( x n , y n ) (x_0,y_0),(x_1,y_1),···,(x_n,y_n) (x0,y0)(x1,y1)(xn,yn),其中任意两个 x x x都互不相同时,有且只有一个n次多项式函数包含这些点值,换句话说,一个n次多项式可以由 n + 1 n+1 n+1个点值来表示,如果我们需要获取一个多项式的点值表示,只需要选取 n + 1 n+1 n+1个互不相同的 x x x代入即可,这样做的复杂度是O(n^2),有没有可能更快呢?考虑代入单位复数根 e 2 π i / n e^{2\pi i/n} e2πi/n,选择单位复数根代入获取点值表示的这样一种方式,和离散傅里叶变换(DFT)完全相同,或者说这就是离散傅里叶变换,采用快速傅里叶变换(FFT)可以将DFT复杂度降低至O(nlogn),也就是说可以采用快速傅里叶变换将多项式点值表示的复杂度降至O(nlogn)

快速傅里叶变换

设已有的一个多项式函数为 P ( x ) = a 0 + a 1 x + a 2 x 2 + ⋅ ⋅ ⋅ + a n x n P(x)=a_0+a_1x+a_2x^2+···+a_nx^n P(x)=a0+a1x+a2x2++anxn w n i = e 2 π i / n w_n^i=e^{2\pi i/n} wni=e2πi/n,n是已知的要变换的序列的长度,并且一般限制为2的幂次,如果多项式的次数不够,就往后补一些系数为0的幂次。现在我们的目的是获取点值序列: ( P ( w n 0 ) , P ( w n 1 ) , P ( w n 2 ) , ⋅ ⋅ ⋅ , P ( w n n − 1 ) ) (P(w_n^0),P(w_n^1),P(w_n^2),···,P(w_n^{n-1})) (P(wn0),P(wn1),P(wn2),,P(wnn1))
P ( w n i ) = ∑ j = 0 n a j ( w n i ) j P(w_n^i) = \sum_{j=0}^{n}a_j(w_n^i)^j P(wni)=j=0naj(wni)j,这样算完整个序列显然复杂度为 O ( n 2 ) O(n^2) O(n2),考虑将这个求和式按照奇偶性分组: P ( w n i ) = ∑ j = 0 n 2 − 1 a 2 j ( w n i ) 2 j + ∑ j = 0 n 2 − 1 a 2 j + 1 ( w n i ) 2 j + 1 P(w_n^i) = \sum_{j=0}^{\frac{n}{2}-1}a_{2j}(w_n^i)^{2j}+\sum_{j=0}^{\frac{n}{2}-1}a_{2j+1}(w_n^i)^{2j+1} P(wni)=j=02n1a2j(wni)2j+j=02n1a2j+1(wni)2j+1
由于复数根有性质: w n i = w n 2 i 2 w_n^i=w_{\frac{n}{2}}^{\frac{i}{2}} wni=w2n2i ( w n i ) 2 j + 1 = ( w n i ) ( w n i ) 2 j = w n i w n 2 i j (w_n^i)^{2j+1}=(w_n^i)(w_n^i)^{2j}=w_n^iw_{\frac{n}{2}}^{ij} (wni)2j+1=(wni)(wni)2j=wniw2n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值