首页 > 其他分享 >FFT

FFT

时间:2024-03-16 16:57:23浏览次数:18  
标签:ix sum FFT 复数 平面 theta

这东西对初中生挺友好的。


引入

设 \(F(x)=\sum_{i=0}^n{a_ix^i},G(x)=\sum_{i=0}^m{b_i} x^i\)。显然,如果要求这两个多项式的积,需要 \(\mathcal O(n^2)\) 的复杂度。但 \(\text{FFT}\) 能通过 \(\mathcal O(n\log n)\) 的复杂度求出。


前置知识

  1. 复数

形如 \(z=a+bi(a,b\in \mathbb R)\) 的数为复数,其中 \(a\) 为实部,\(b\) 为虚部。如果把 \(a,b\) 分别看作平面直角坐标系中的 \(x,y\) 轴,则平面直角坐标系里的每个点都对应了一个复数,这个平面叫复平面。

  1. 三角函数

坐标系中任意一点 \((x,y)\) 与 \(x\) 轴所成的夹角记为 \(\theta\)。则

\[\sin \theta=\frac{y}{\sqrt{x^2+y^2}} \]

\[\cos \theta=\frac{x}{\sqrt{x^2+y^2}} \]

欧拉公式:\(e^{i\theta}=\cos\theta +i\sin\theta\)

  1. 幅角

简单来说,\(180\degree=\pi,360\degree = 2\pi\)。

  1. 单位根

复平面中,以原点为圆心,\(1\) 为半径的圆称为单位圆。\(n\) 阶单位根是内接单位圆的 \(n\) 边形的 \(n\) 个顶点,满足 \(n\) 边形有一个顶点为 \((1,0)\)。可以发现,这 \(n\) 个点对应的复数恰好是方程 \(z^n=1\) 的 \(n\) 个解。
由相关知识得出这 \(n\) 个单位根可以写成:\(z_k=\cos \frac{2\pi k}{n}+i\sin\)


FFT

设函数 \(F(x)=\sum_{i=0}^n{a_ix^n}\),则这个函数可以用 \(n+1\) 个点表示出来。例如一次函数需要两个点表示,二次函数要三个。感性理解就是一个点能确定一个系数。

如果我们要求两个多项式 \(F(x)=\sum_{i=0}^n{a_ix^i},G(x)=\sum_{i=0}^m{b_i} x^i\) 的积 \(T(x)=\sum_{i=0}^{n+m}c_ix^i\),显然用点值表示法相乘只需要 \(O(n)\) 的复杂度。所以考虑怎么取点。

标签:ix,sum,FFT,复数,平面,theta
From: https://www.cnblogs.com/kbzcz/p/18077264

相关文章

  • [AH2017HNOI2017] 礼物(fft)
    [AH2017/HNOI2017]礼物(fft)题目描述我的室友最近喜欢上了一个可爱的小女生。马上就要到她的生日了,他决定买一对情侣手环,一个留给自己,一个送给她。每个手环上各有\(n\)个装饰物,并且每个装饰物都有一定的亮度。但是在她生日的前一天,我的室友突然发现他好像拿错了一个手环,而且......
  • Python报错symbol lookup error: xxx.so: undefined symbol: cufftxxx解决办法
    技术背景在上一篇文章中介绍过如何实现本地MindSpore的CUDA算子,那么在算子编译和使用的过程中可能会出现一些小问题,这里介绍的是编译成功为so动态链接库之后,在python中调用,提示找不到xxx函数/字符的报错。这里使用的编译指令为:$nvcc--shared-Xcompiler-fPIC-oxxx.soxxx.c......
  • FFT学习笔记
    目录FFT推荐博客大致流程复数运算DFT单位根(n等分)性质FFTIFFT递归版迭代版(蝴蝶变化)FFT推荐博客快速傅里叶变换(FFT)超详解浅谈FFT(终于懂一点了~~)十分简明易懂的FFT(快速傅里叶变换)题目链接:P3803【模板】多项式乘法(FFT)大致流程系数表示法<--O(NlongN)-->点值表示法点值表......
  • 聊聊 fft 的单位根
    与ntt不同,处理fft的单位根要更加复杂,主要原因是考虑精度的问题.我们可以认为直接从三角函数计算出的单位根精度是最高的.当然由于\(\sin(x)\)和\(\cos(x)\)的渐进估计涉及到高次项,因此使用longdouble计算单位根再转成double是一点点意义的(如果longdouble精......
  • 【多项式】【模版】FFT NTT
    多项式若\(A(x)=a_0+a_1x+a_2x^2+\dotsa_nx^n(a_n\ne0)\),则称\(A\)是\(n\)次多项式。初中概念,但在OI中可以玩出花来。多项式的表示方式像上面的介绍一样,用系数\(a_0,a_1,\dotsa_n\)来表示多项式的方法称为系数表示法。还有一种表示多项式的方法,就是对于\(n\)......
  • P4721 【模板】分治 FFT
    最具经济性的写法:\(\mathcalO(n^2)\)暴力拿下\(80\)分,遂跑路。一题多解了,分两部分:分治和多项式求逆。分治考虑cdq分治,每次把\(f_{l\dotsmid}\)和\(g_{1\dotsn-1}\)卷起来,贡献直接加到\(f_{mid+1\dotsr}\)里,要注意一下顺序,先递归左区间,再算当前区间,最......
  • FFT快速傅里叶变换
    傅里叶变换复数定义:x,y为实数,称形如(x,y)的有序数对为复数。复数(x,y)中的第一个实数x称为复数z的实部,第二个实数y称为复数z的虚部。代码实现及运算:structComplex{ doux,y; Complex(douxx=0,douyy=0){x=xx,y=yy;} Complexoperator+(Com......
  • FFT理论与习题
    参考了这篇博客,并且自己重新证了一下这篇博客中,笔者认为有误的IDFT中\(j\neqk\)的部分。第零部分·原理FFT是一种DFT的高效算法,称为快速傅里叶变换(fastFouriertransform),当然也可以用来算IDFT。这俩玩意前者可以把多项式从系数表达式转化成点值表达式,后者可以把点......
  • What is FFT? FFT学习笔记
    在时间序列、数字信号的数据处理中经常会看到使用FFT作为一段数据中提取频率的手段,但是往往文中没有花大笔墨去解释,仿佛所有人都了解这个概念。FFT(FastFourierTransform)为快速傅里叶变换,是一种高效计算DFT(DiscreteFourierTransform),离散傅里叶变换的方法。在了解FFT之前......
  • fft/ifft示例
     clearall;lstf=1/sqrt(2)*[0,0,0,0,0,0,0,0,1+1i,0,0,0,-1-1i,0,0,0,1+1i,0,0,0,-1-1i,0,0,0,-1-1i,0,0,0,1+1i,0,0,0,0,0,0,0,-1-1i,0,0,0,-1-1i,0,......