【总结】FFT算法在信息竞赛中的应用

FFT算法本身就是一种优化,优化(类似)卷积运算的时间复杂度
(卷积: ∑ i , j a i ∗ b j − i \sum_{i,j}a_i*b_{j-i} i,jaibji)。
FFT的本质,其实是利用复数的一些特殊性质,将一个多项式快速地在点值和系数两种表示方法间来回切换。再利用两个多项式点值表示法相乘的复杂度为O(n),来达到降时间的目的。

FFT算法的前导概念

首先介绍关于复数的一些定义及性质
复数:一种形如 a + b i a+bi a+bi的数称为复数,其中 a a a为实部, b b b为虚部, i i i为虚部单位 ( i 2 = − 1 ) (i^2=-1) i2=1

对于每个 a + b i a+bi a+bi a − b i a-bi abi为它的共轭复数

其实可以将复数看作一个二项式,其运算法则与实数概念上的二项式几乎相同,只需要注意i即可。

另外,复数也可以用向量来表示:表示为在复平面上(a,b)的向量。向量的模长为 a 2 + b 2 \sqrt{a^2+b^2} a2+b2
所以,同样地,复数还可以用三角函数来表示:即
a + b i = a 2 + b 2 ∗ ( c o s θ + s i n θ i ) a+bi=\sqrt{a^2+b^2}*(cos\theta+sin\theta i) a+bi=a2+b2 (cosθ+sinθi)
在这种表示方法下,两个复数相乘,就可以表示为其角度相加,模长相乘
p ∗ ( c o s α + s i n α i ) ∗ q ∗ ( c o s β + s i n β i ) p*(cos\alpha+sin\alpha i)*q*(cos\beta+sin\beta i) p(cosα+sinαi)q(cosβ+sinβi)
= p ∗ q ∗ ( s i n α ∗ c o s β i + c o s α ∗ s i n β i − s i n α ∗ s i n β + c o s α ∗ c o s β ) =p*q*(sin\alpha*cos\beta i+cos\alpha*sin\beta i-sin\alpha*sin\beta+cos\alpha*cos\beta) =pq(sinαcosβi+cosαsinβisinαsinβ+cosαcosβ)
= p ∗ q ∗ ( c o s ( α + β ) + s i n ( α + β ) i ) =p*q*(cos(\alpha+\beta)+sin(\alpha+\beta)i) =pq(cos(α+β)+sin(α+β)i)

然后是多项式的一些概念:
首先我们将 A ( x ) = a n x n + a n − 1 x n − 1 + a n − 2 x n − 2 . . . a 1 x + a 0 A(x)=a_nx^n+a_{n-1}x^{n-1}+a_{n-2}x^{n-2}...a_1x+a_0 A(x)=anx

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值