多项式全家桶——炫酷多项式变换

FFT

相信大家FFT已经掌握的很熟练了。

参考这一篇博客:浅谈算法——从多项式乘法到FFT

常数优化1——IDFT

若已知多项式 A ( x ) A(x) A(x)的点值表示
&lt; ( ω n 0 , A ( ω n 0 ) ) , ( ω n 1 , A ( ω n 1 ) ) , ⋯ &ThinSpace; , ( ω n n − 1 , A ( ω n n − 1 ) ) &gt; &lt;(\omega_n^0,A(\omega_n^0)),(\omega_n^1,A(\omega_n^1)),\cdots,(\omega_n^{n-1},A(\omega_n^{n-1}))&gt; <(ωn0,A(ωn0)),(ωn1,A(ωn1)),,(ωnn1,A(ωnn1))>
则多项式 A ( x ) A(x) A(x)满足
[ x r e v ( k ) ] A ( x ) = 1 n ∑ i = 0 n − 1 ω n k i A ( ω n i ) [x^{rev(k)}]A(x)=\frac{1}{n}\sum_{i=0}^{n-1}\omega_n^{ki}A(\omega_n^i) [xrev(k)]A(x)=n1i=0n1ωnkiA(ωni)
其中
r e v ( k ) = { 0 k = 0 n − k − 1 k ̸ = 0 rev(k)=\begin{cases} 0 &amp; k=0\\ n-k-1 &amp; k\not= 0 \end{cases} rev(k)={ 0nk1k=0k̸=0
就是说:IDFT只需要调用DFT函数然后std::reverse(a+1,a+n+1),最后同时除以 n n n即可。

证明:假设
A ( x ) = ∑ i = 0 n − 1 a i x i A(x)=\sum_{i=0}^{n-1}a_ix^i A(x)=i=0n1aixi
那么
[ x r e v ( k ) ] A ( x ) = 1 n ∑ i = 0 n − 1 ω n k i ∑ j = 0 n − 1 a j ω n i j [x^{rev(k)}]A(x)=\frac{1}{n}\sum_{i=0}^{n-1}\omega_n^{ki}\sum_{j=0}^{n-1}a_j\omega_n^{ij} [xrev(k)]A(x)=n1i=0n1ωnkij=0n1ajωnij
交换两个求和符号
[ x r e v ( k ) ] A ( x ) = 1 n ∑ i = 0 n − 1 a i ∑ j = 0 n − 1 ω n i j ω n k j [x^{rev(k)}]A(x)=\frac{1}{n}\sum_{i=0}^{n-1}a_i\sum_{j=0}^{n-1}\omega_n^{ij}\omega_n^{kj} [xrev(k)]A(x)=n1i=0n1aij=0n1ωnijωnkj
显然
[ x r e v ( k ) ] A ( x ) = 1 n ∑ i = 0 n − 1 a i ∑ j = 0 n − 1 ω n ( i + k ) j [x^{rev(k)}]A(x)=\frac{1}{n}\sum_{i=0}^{n-1}a_i\sum_{j=0}^{n-1}\omega_n^{(i+k)j} [xrev(k)]A(x)=n1i=0n1aij=0n1ωn(i+k)j
此时,若 i = r e v ( k ) i=rev(k) i=rev(k),则 i + k = 0 ( &VeryThinSpace; m o d &VeryThinSpace; n ) i+k=0(\bmod n) i+k=0(modn),此时
ω n ( i + k ) j = 1 \omega_n^{(i+k)j}=1 ωn(i+k)j=1

∑ j = 0 n − 1 ω n ( i + k ) j = n \sum_{j=0}^{n-1}\omega_n^{(i+k)j}=n j=0n1ωn(i+k)j=n
否则由等比数列求和公式
∑ j = 0 n − 1 ω n ( i + k ) j = 1 − ω n ( i + k ) n 1 − ω n i + k = 0 \sum_{j=0}^{n-1}\omega_n^{(i+k)j}=\frac{1-\omega_n^{(i+k)n}}{1-\omega_n^{i+k}}=0 j=0n1ωn(i+k)j=1ωni+k1ωn(i+k)n=0
因此
[ x r e v ( k ) ] A ( x ) = 1 n a r e v ( k ) n = a r e v ( k ) [x^{rev(k)}]A(x)=\frac{1}{n}a_{rev(k)}n=a_{rev(k)} [xrev(k)]A(x)=

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值