day of defout of range怎么解决进入游戏

503 Service Unavailable503Service UnavailableError Times: Thu, 12 Jul :35 GMTIP: 49.76.140.204Node information:PSgdfsdx6rq76:8,
dxin171:6URL: http://www.yxdown.com/gl/376929.htmlPlease contact our support: Check: Details503Service Unavailable出错时间: Thu, 12 Jul :35 GMT用户IP: 49.76.140.204节点信息:PSgdfsdx6rq76:8,
dxin171:6URL: http://www.yxdown.com/gl/376929.html如需支持请联系我们: 查看报错详情: 详细信息http://www.yxdown.com/gl/376929.html载入多人游戏时显示battleye must be installed 。。怎么办【dayofinfamy吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:1,681贴子:
载入多人游戏时显示battleye must be installed 。。怎么办
载入多人游戏时显示battleye must be installed and running to join this server再然后就卡出来不能玩了,哪位大神知道怎么回事啊?
你要下battleeye
安装楼上那个还不行就挂个加速器,100%可以。
游戏安装目录下自带一个battleye,把它装上,另外别让杀毒软件把它禁了,这是一个反作弊软件,必须能用才能玩多人
贴吧热议榜
使用签名档&&
保存至快速回贴&figure&&img src=&https://pic4.zhimg.com/v2-315ba5424cdcd6eca5c47a3b_b.jpg& data-rawwidth=&1920& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&https://pic4.zhimg.com/v2-315ba5424cdcd6eca5c47a3b_r.jpg&&&/figure&&h2&&b&0x00 写在前面&/b&&/h2&&p&为了让更多人能够看到这个教程,希望大家收藏之前,也要点赞哦!!!蟹蟹大家的认可和鼓励。
&/p&&p&&br&&/p&&p&&b&傅里叶变换&/b&&/p&&p&&br&&/p&&p&快速傅里叶变换(Fast Fourier Transform,FFT)是一种可在 &img src=&https://www.zhihu.com/equation?tex=O%28nlogn%29& alt=&O(nlogn)& eeimg=&1&& 时间内完成的离散傅里叶变换(Discrete Fourier transform,DFT)算法。&/p&&p&在算法竞赛中的运用主要是用来加速多项式的乘法。&/p&&p&&br&&/p&&p&考虑到两个多项式 &img src=&https://www.zhihu.com/equation?tex=A%28x%29%2CB%28x%29& alt=&A(x),B(x)& eeimg=&1&& 的乘积 &img src=&https://www.zhihu.com/equation?tex=C%28x%29& alt=&C(x)& eeimg=&1&& ,假设 &img src=&https://www.zhihu.com/equation?tex=A%28x%29& alt=&A(x)& eeimg=&1&& 的项数为 &img src=&https://www.zhihu.com/equation?tex=n& alt=&n& eeimg=&1&& ,其系数构成的 &img src=&https://www.zhihu.com/equation?tex=n& alt=&n& eeimg=&1&& 维向量为 &img src=&https://www.zhihu.com/equation?tex=%28a_0%2Ca_1%2Ca_2%2C...%2Ca_%7Bn-1%7D%29& alt=&(a_0,a_1,a_2,...,a_{n-1})& eeimg=&1&& , &img src=&https://www.zhihu.com/equation?tex=B%28x%29& alt=&B(x)& eeimg=&1&& 的项数为 &img src=&https://www.zhihu.com/equation?tex=m& alt=&m& eeimg=&1&& ,其系数构成的 &img src=&https://www.zhihu.com/equation?tex=m& alt=&m& eeimg=&1&& 维向量为 &img src=&https://www.zhihu.com/equation?tex=%28b_0%2Cb_1%2Cb_2%2C...%2Cb_%7Bm-1%7D%29& alt=&(b_0,b_1,b_2,...,b_{m-1})& eeimg=&1&& 。&/p&&p&我们要求 &img src=&https://www.zhihu.com/equation?tex=C%28x%29& alt=&C(x)& eeimg=&1&& 的系数构成的 &img src=&https://www.zhihu.com/equation?tex=n%2Bm-1& alt=&n+m-1& eeimg=&1&&维的向量,先考虑朴素做法。&/p&&p&可以用这段代码表示:&/p&&div class=&highlight&&&pre&&code class=&language-cpp&&&span&&/span&&span class=&k&&for&/span& &span class=&p&&(&/span& &span class=&kt&&int&/span& &span class=&n&&i&/span& &span class=&o&&=&/span& &span class=&mi&&0&/span& &span class=&p&&;&/span& &span class=&n&&i&/span& &span class=&o&&&&/span& &span class=&n&&n&/span& &span class=&p&&;&/span& &span class=&o&&++&/span& &span class=&n&&i&/span& &span class=&p&&)&/span&
&span class=&k&&for&/span& &span class=&p&&(&/span& &span class=&kt&&int&/span& &span class=&n&&j&/span& &span class=&o&&=&/span& &span class=&mi&&0&/span& &span class=&p&&;&/span& &span class=&n&&j&/span& &span class=&o&&&&/span& &span class=&n&&m&/span& &span class=&p&&;&/span& &span class=&o&&++&/span& &span class=&n&&j&/span& &span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&n&&c&/span& &span class=&p&&[&/span&&span class=&n&&i&/span& &span class=&o&&+&/span& &span class=&n&&j&/span&&span class=&p&&]&/span& &span class=&o&&+=&/span& &span class=&n&&a&/span& &span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&p&&]&/span& &span class=&o&&*&/span& &span class=&n&&b&/span& &span class=&p&&[&/span&&span class=&n&&j&/span&&span class=&p&&]&/span& &span class=&p&&;&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&p&思路非常清晰,其时间复杂度是 &img src=&https://www.zhihu.com/equation?tex=O%28n%5E2%29& alt=&O(n^2)& eeimg=&1&& 的。&/p&&p&&br&&/p&&p&所以我们来学习&b&快速傅里叶变换&/b&。&/p&&hr&&h2&&b&0x01 关于多项式&/b&&/h2&&p&多项式有两种表示方法,&b&系数表达法&/b&与&b&点值表达法&/b&&/p&&p&&b&多项式的系数表示法&/b&&/p&&p&设多项式 &img src=&https://www.zhihu.com/equation?tex=A%28x%29& alt=&A(x)& eeimg=&1&& 为一个 &img src=&https://www.zhihu.com/equation?tex=n-1& alt=&n-1& eeimg=&1&& 次的多项式,显然,所有项的系数组成的系数向量 &img src=&https://www.zhihu.com/equation?tex=%28a_0%2Ca_1%2Ca_2%2C...%2Ca_%7Bn-1%7D%29& alt=&(a_0,a_1,a_2,...,a_{n-1})& eeimg=&1&& 唯一确定了这个多项式。&/p&&p&&img src=&https://www.zhihu.com/equation?tex=A%28x%29%3D%5Csum_%7Bi%3D0%7D%5E%7Bn-1%7Da_i%5Ccdot+x%5Ei& alt=&A(x)=\sum_{i=0}^{n-1}a_i\cdot x^i& eeimg=&1&&&/p&&p&&b&多项式的点值表示法&/b&&/p&&p&将一组互不相同的 &img src=&https://www.zhihu.com/equation?tex=%28x_0%2Cx_1%2Cx_2%2C...%2Cx_n%29& alt=&(x_0,x_1,x_2,...,x_n)& eeimg=&1&& (叫插值节点)分别带入 &img src=&https://www.zhihu.com/equation?tex=A%28x%29& alt=&A(x)& eeimg=&1&& ,得到 &img src=&https://www.zhihu.com/equation?tex=n& alt=&n& eeimg=&1&& 个取值 &img src=&https://www.zhihu.com/equation?tex=%28y_0%2Cy_1%2Cy_2%2C...%2Cy_n%29& alt=&(y_0,y_1,y_2,...,y_n)& eeimg=&1&& .&/p&&p&其中&/p&&p&&img src=&https://www.zhihu.com/equation?tex=y_i%3D%5Csum_%7Bj%3D0%7D%5E%7Bn-1%7Da_j%5Ccdot+x_i%5Ej& alt=&y_i=\sum_{j=0}^{n-1}a_j\cdot x_i^j& eeimg=&1&&&/p&&p&&b&定理:&/b&&/p&&blockquote&一个 &img src=&https://www.zhihu.com/equation?tex=n-1& alt=&n-1& eeimg=&1&& 次多项式在 &img src=&https://www.zhihu.com/equation?tex=n& alt=&n& eeimg=&1&& 个不同点的取值唯一确定了该多项式。&/blockquote&&p&&b&证明:&/b&&/p&&blockquote&假设命题不成立,存在两个不同的 &img src=&https://www.zhihu.com/equation?tex=n-1& alt=&n-1& eeimg=&1&& 次多项式 &img src=&https://www.zhihu.com/equation?tex=A%28x%29%2CB%28x%29& alt=&A(x),B(x)& eeimg=&1&& ,满足对于任何 &img src=&https://www.zhihu.com/equation?tex=i+%5Cin+%5B0%2C%5C+n+-+1%5D& alt=&i \in [0,\ n - 1]& eeimg=&1&& ,有 &img src=&https://www.zhihu.com/equation?tex=A%28x_i%29+%3D+B%28x_i%29& alt=&A(x_i) = B(x_i)& eeimg=&1&& 。&br&令 &img src=&https://www.zhihu.com/equation?tex=+C%28x%29+%3D+A%28x%29+-+B%28x%29& alt=& C(x) = A(x) - B(x)& eeimg=&1&& ,则 &img src=&https://www.zhihu.com/equation?tex=C%28x%29+& alt=&C(x) & eeimg=&1&& 也是一个 &img src=&https://www.zhihu.com/equation?tex=n-1& alt=&n-1& eeimg=&1&& 次多项式。对于任何 &img src=&https://www.zhihu.com/equation?tex=+i+%5Cin+%5B0%2C%5C+n+-+1%5D& alt=& i \in [0,\ n - 1]& eeimg=&1&& ,都有 &img src=&https://www.zhihu.com/equation?tex=C%28x_i%29+%3D+0& alt=&C(x_i) = 0& eeimg=&1&& 。&br&即 &img src=&https://www.zhihu.com/equation?tex=+C%28x%29& alt=& C(x)& eeimg=&1&& 有 &img src=&https://www.zhihu.com/equation?tex=n& alt=&n& eeimg=&1&& 个根,这与代数基本定理(一个 &img src=&https://www.zhihu.com/equation?tex=n-1& alt=&n-1& eeimg=&1&& 次多项式在复数域上有且仅有 &img src=&https://www.zhihu.com/equation?tex=n-1& alt=&n-1& eeimg=&1&& 个根)相矛盾,故 &img src=&https://www.zhihu.com/equation?tex=C%28x%29& alt=&C(x)& eeimg=&1&& 并不是一个 &img src=&https://www.zhihu.com/equation?tex=n-1& alt=&n-1& eeimg=&1&& 次多项式,推到矛盾。&br&原命题成立,证毕。&/blockquote&&p&如果我们按照定义求一个多项式的点值表示,时间复杂度为 &img src=&https://www.zhihu.com/equation?tex=O%28n%5E2%29& alt=&O(n^2)& eeimg=&1&&&/p&&p&已知多项式的点值表示,求其系数表示,可以使用&b&插值&/b&。朴素的插值算法时间复杂度为 &img src=&https://www.zhihu.com/equation?tex=O%28n%5E2%29& alt=&O(n^2)& eeimg=&1&& 。&/p&&p&&b&关于多项式的乘法&/b&&/p&&p&已知在一组插值节点 &img src=&https://www.zhihu.com/equation?tex=%28x_0%2Cx_1%2Cx_2%2C...%2Cx_n%29& alt=&(x_0,x_1,x_2,...,x_n)& eeimg=&1&& 中 &img src=&https://www.zhihu.com/equation?tex=A%28x%29%2CB%28x%29& alt=&A(x),B(x)& eeimg=&1&& (假设个多项式的项数相同,没有的视为 &img src=&https://www.zhihu.com/equation?tex=0& alt=&0& eeimg=&1&& )的点值向量分别为 &img src=&https://www.zhihu.com/equation?tex=%28y_%7Ba0%7D%2Cy_%7Ba1%7D%2Cy_%7Ba_2%7D%2C...%2Cy_%7Ban%7D%29%2C%28y_%7Bb0%7D%2Cy_%7Bb1%7D%2Cy_%7Bb_2%7D%2C...%2Cy_%7Bbn%7D%29& alt=&(y_{a0},y_{a1},y_{a_2},...,y_{an}),(y_{b0},y_{b1},y_{b_2},...,y_{bn})& eeimg=&1&& ,那么 &img src=&https://www.zhihu.com/equation?tex=C%28x%29%3DA%28x%29%5Ccdot+B%28x%29& alt=&C(x)=A(x)\cdot B(x)& eeimg=&1&& 的点值表达式可以在 &img src=&https://www.zhihu.com/equation?tex=O%28n%29& alt=&O(n)& eeimg=&1&& 的时间内求出,为 &img src=&https://www.zhihu.com/equation?tex=%28y_%7Ba0%7D%5Ccdot+y_%7Bb0%7D%2Cy_%7Ba1%7D%5Ccdot+y_%7Bb1%7D%2Cy_%7Ba_2%7D%5Ccdot+y_%7Bb2%7D%2C...%2Cy_%7Ban%7D%5Ccdot+y_%7Bbn%7D%29& alt=&(y_{a0}\cdot y_{b0},y_{a1}\cdot y_{b1},y_{a_2}\cdot y_{b2},...,y_{an}\cdot y_{bn})& eeimg=&1&& 。&/p&&p&因为 &img src=&https://www.zhihu.com/equation?tex=C%28x%29& alt=&C(x)& eeimg=&1&& 的项数为 &img src=&https://www.zhihu.com/equation?tex=A%28x%29%2CB%28x%29& alt=&A(x),B(x)& eeimg=&1&& 的项数之和。&/p&&p&设 &img src=&https://www.zhihu.com/equation?tex=A%28x%29%2CB%28x%29& alt=&A(x),B(x)& eeimg=&1&& 分别有 &img src=&https://www.zhihu.com/equation?tex=n%2Cm& alt=&n,m& eeimg=&1&& 项所以我们带入的插值节点有至少有 &img src=&https://www.zhihu.com/equation?tex=n%2Bm& alt=&n+m& eeimg=&1&& 个。&/p&&p&&br&&/p&&p&如果我们能快速通过点值表式求出系数表示,那么就搭起了它们之间的一座桥了。&/p&&p&&br&&/p&&p&这也是快速傅里叶变换的基本思路,由系数表达式到点值表达式到结果的点值表达式再到结果的系数表达式。&/p&&hr&&h2&&b&0x02 关于复数的基本了解&/b&&/h2&&p&&br&&/p&&p&我们把形如 &img src=&https://www.zhihu.com/equation?tex=a%2Bbi& alt=&a+bi& eeimg=&1&& 这样的数叫做复数,复数集合用 &img src=&https://www.zhihu.com/equation?tex=C& alt=&C& eeimg=&1&& 来表示。其中 &img src=&https://www.zhihu.com/equation?tex=a+& alt=&a & eeimg=&1&& 称为实部 &img src=&https://www.zhihu.com/equation?tex=%28real%5C%3Bpart%29& alt=&(real\;part)& eeimg=&1&& , &img src=&https://www.zhihu.com/equation?tex=b& alt=&b& eeimg=&1&& 称为虚部 &img src=&https://www.zhihu.com/equation?tex=%28imaginary%5C%3Bpart%29& alt=&(imaginary\;part)& eeimg=&1&& , &img src=&https://www.zhihu.com/equation?tex=i& alt=&i& eeimg=&1&& 为虚数单位,指满足 &img src=&https://www.zhihu.com/equation?tex=x%5E2%3D-1& alt=&x^2=-1& eeimg=&1&& 的一个解 &img src=&https://www.zhihu.com/equation?tex=%5Csqrt%7B-1%7D& alt=&\sqrt{-1}& eeimg=&1&& ;此外,对于这样对复数开偶次幂的数叫做虚数 &img src=&https://www.zhihu.com/equation?tex=%28+imaginary%5C%3Bnumber%29& alt=&( imaginary\;number)& eeimg=&1&& .&/p&&p&&br&&/p&&p&每一个复数 &img src=&https://www.zhihu.com/equation?tex=a%2Bbi& alt=&a+bi& eeimg=&1&& 都对应了一个平面上的向量 &img src=&https://www.zhihu.com/equation?tex=%28a%2Cb%29& alt=&(a,b)& eeimg=&1&& 我们把这样的平面称为复平面 &img src=&https://www.zhihu.com/equation?tex=%28complex%5C%3Bplane%29& alt=&(complex\;plane)& eeimg=&1&& ,它是由水平的实轴与垂直的虚轴建立起来的复数的几何表示。&/p&&p&故每一个复数唯一对应了一个复平面上的向量,每一个复平面上的向量也唯一对应了一个复数。其中 &img src=&https://www.zhihu.com/equation?tex=0& alt=&0& eeimg=&1&& 既被认为是实数,也被认为是虚数。&/p&&p&&br&&/p&&p&其中复数 &img src=&https://www.zhihu.com/equation?tex=z%3Da%2Bbi& alt=&z=a+bi& eeimg=&1&& 的模长 &img src=&https://www.zhihu.com/equation?tex=%5Cleft%7C+z+%5Cright%7C& alt=&\left| z \right|& eeimg=&1&& 定义为 &img src=&https://www.zhihu.com/equation?tex=z& alt=&z& eeimg=&1&& 在复平面的距离到原点的距离, &img src=&https://www.zhihu.com/equation?tex=%5Cleft%7C+z+%5Cright%7C%3D%5Csqrt%7Ba%5E2%2Bb%5E2%7D& alt=&\left| z \right|=\sqrt{a^2+b^2}& eeimg=&1&& 。幅角 &img src=&https://www.zhihu.com/equation?tex=%5Ctheta& alt=&\theta& eeimg=&1&& 为实轴的正半轴正方向(逆时针)旋转到 &img src=&https://www.zhihu.com/equation?tex=z& alt=&z& eeimg=&1&& 的有向角度。&/p&&p&&br&&/p&&p&由于虚数无法比较大小。复数之间的大小关系只存在&b&等于&/b&与&b&不等于&/b&两种关系,两个复数相等当且仅当&b&实部虚部对应相等&/b&。对于虚部为 &img src=&https://www.zhihu.com/equation?tex=0& alt=&0& eeimg=&1&& 的复数之间是可以比较大小的,相当于实数之间的比较。&/p&&p&&br&&/p&&p&复数之间的运算满足&b&结合律&/b&,&b&交换律&/b&和&b&分配律&/b&。&/p&&p&由此定义复数之间的运算法则:&/p&&p&&img src=&https://www.zhihu.com/equation?tex=%28a%2Bbi%29%2B%28c%2Bdi%29%3D%28a%2Bc%29%2B%28b%2Bd%29i& alt=&(a+bi)+(c+di)=(a+c)+(b+d)i& eeimg=&1&&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=%28a%2Bbi%29-%28c%2Bdi%29%3D%28a-c%29%2B%28b-d%29i& alt=&(a+bi)-(c+di)=(a-c)+(b-d)i& eeimg=&1&&&img src=&https://www.zhihu.com/equation?tex=%28a%2Bbi%29%5Ccdot%28c%2Bdi%29%3Dac%2Badi%2Bbci%2Bbdi%5E2%3D%28ac-bd%29%2B%28ad%2Bcb%29i& alt=&(a+bi)\cdot(c+di)=ac+adi+bci+bdi^2=(ac-bd)+(ad+cb)i& eeimg=&1&&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=%5Cfrac%7Ba%2Bbi%7D%7Bc%2Bdi%7D%3D%5Cfrac%7B%28a%2Bbi%29%5Ccdot%28c-di%29%7D%7B%28c%2Bdi%29%5Ccdot%28c-di%29%7D%3D%5Cfrac%7B%28ac%2Bbd%29%2B%28bc-ad%29i%7D%7Bc%5E2%2Bd%5E2%7D%3D%5Cfrac%7B%28ac%2Bbd%29%7D%7Bc%5E2%2Bd%5E2%7D%2B%5Cfrac%7B%28bc-ad%29i%7D%7Bc%5E2%2Bd%5E2%7D& alt=&\frac{a+bi}{c+di}=\frac{(a+bi)\cdot(c-di)}{(c+di)\cdot(c-di)}=\frac{(ac+bd)+(bc-ad)i}{c^2+d^2}=\frac{(ac+bd)}{c^2+d^2}+\frac{(bc-ad)i}{c^2+d^2}& eeimg=&1&&&/p&&p&&br&&/p&&p&复数运算的加法满足&b&平行四边形法则&/b&,乘法满足&b&幅角相加,模长相乘&/b&。&/p&&p&对于一个复数 &img src=&https://www.zhihu.com/equation?tex=z%3Da%2Bbi& alt=&z=a+bi& eeimg=&1&& ,它的共轭复数是 &img src=&https://www.zhihu.com/equation?tex=z%5E%7B%27%7D%3Da-bi& alt=&z^{'}=a-bi& eeimg=&1&& , &img src=&https://www.zhihu.com/equation?tex=z%5E%7B%27%7D& alt=&z^{'}& eeimg=&1&& 称为 &img src=&https://www.zhihu.com/equation?tex=z& alt=&z& eeimg=&1&& 的复共轭 &img src=&https://www.zhihu.com/equation?tex=%28complex%5C%3Bconjugate%29& alt=&(complex\;conjugate)& eeimg=&1&& .&/p&&p&共轭复数有一些性质&/p&&p&&img src=&https://www.zhihu.com/equation?tex=z%5Ccdot+z%5E%7B%27%7D%3Da%5E2%2Bb%5E2& alt=&z\cdot z^{'}=a^2+b^2& eeimg=&1&&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=%5Cleft%7C+z+%5Cright%7C+%3D+%5Cleft+%7C+z%5E%7B%27%7D+%5Cright%7C& alt=&\left| z \right| = \left | z^{'} \right|& eeimg=&1&&&/p&&hr&&h2&&b&0x03 复数中的单位根&/b&&/h2&&p&&br&&/p&&p&复平面中的&b&单位圆&/b&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-9f362e80d8a3ede0e575fc3ea2b05fb2_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1298& data-rawheight=&845& class=&origin_image zh-lightbox-thumb& width=&1298& data-original=&https://pic2.zhimg.com/v2-9f362e80d8a3ede0e575fc3ea2b05fb2_r.jpg&&&/figure&&p&其中 &img src=&https://www.zhihu.com/equation?tex=%5Cbar%7BOA%7D& alt=&\bar{OA}& eeimg=&1&& 单位根,表示为 &img src=&https://www.zhihu.com/equation?tex=e%5E%7Bi%5Ctheta%7D& alt=&e^{i\theta}& eeimg=&1&& ,可知 &img src=&https://www.zhihu.com/equation?tex=e%5E%7Bi%5Ctheta%7D%3Dcos%5Ctheta%2Bi%5Ccdot+sin%5Ctheta& alt=&e^{i\theta}=cos\theta+i\cdot sin\theta& eeimg=&1&&&/p&&p&(顺便一提著名的欧拉幅角公式 &img src=&https://www.zhihu.com/equation?tex=e%5E%7Bi%5Cpi%7D%2B1%3D0& alt=&e^{i\pi}+1=0& eeimg=&1&& 其实是由定义来的...)&/p&&p&&br&&/p&&p&将单位圆等分成 &img src=&https://www.zhihu.com/equation?tex=n& alt=&n& eeimg=&1&& 个部分(以单位圆与实轴正半轴的交点一个等分点),以原点为起点,圆的这 &img src=&https://www.zhihu.com/equation?tex=n& alt=&n& eeimg=&1&& 个 &img src=&https://www.zhihu.com/equation?tex=n& alt=&n& eeimg=&1&& 等分点为终点,作出 &img src=&https://www.zhihu.com/equation?tex=n& alt=&n& eeimg=&1&& 个向量。&/p&&p&其中&b&幅角为正且最小&/b&的向量称为 &img src=&https://www.zhihu.com/equation?tex=n& alt=&n& eeimg=&1&& 次单位向量,记为 &img src=&https://www.zhihu.com/equation?tex=%5Comega_%7Bn%7D%5E%7B1%7D& alt=&\omega_{n}^{1}& eeimg=&1&& 。&/p&&p&(&b&有没有大佬帮我补张图啊,画不来&/b&)&/p&&p&其余的 &img src=&https://www.zhihu.com/equation?tex=n-1& alt=&n-1& eeimg=&1&& 个向量分别为 &img src=&https://www.zhihu.com/equation?tex=%5Comega_%7Bn%7D%5E%7B2%7D%2C%5Comega_%7Bn%7D%5E%7B3%7D%2C......%2C%5Comega_%7Bn%7D%5E%7Bn%7D& alt=&\omega_{n}^{2},\omega_{n}^{3},......,\omega_{n}^{n}& eeimg=&1&& ,它们可以由复数之间的乘法得来 &img src=&https://www.zhihu.com/equation?tex=w_%7Bn%7D%5E%7Bk%7D%3Dw_%7Bn%7D%5E%7Bk-1%7D%5Ccdot+w_%7Bn%7D%5E%7B1%7D%5C+%282+%5Cleq+k+%5Cleq+n%29& alt=&w_{n}^{k}=w_{n}^{k-1}\cdot w_{n}^{1}\ (2 \leq k \leq n)& eeimg=&1&& 。&/p&&p&容易看出 &img src=&https://www.zhihu.com/equation?tex=w_%7Bn%7D%5E%7Bn%7D%3Dw_%7Bn%7D%5E%7B0%7D%3D1& alt=&w_{n}^{n}=w_{n}^{0}=1& eeimg=&1&& 。&/p&&p&对于 &img src=&https://www.zhihu.com/equation?tex=w_%7Bn%7D%5E%7Bk%7D& alt=&w_{n}^{k}& eeimg=&1&& ,它事实上就是 &img src=&https://www.zhihu.com/equation?tex=e%5E%7B2%5Cpi%5Ccdot+%5Cfrac%7Bk%7D%7Bn%7Di%7D& alt=&e^{2\pi\cdot \frac{k}{n}i}& eeimg=&1&& 。&/p&&p&所以 &img src=&https://www.zhihu.com/equation?tex=%5Comega_%7Bn%7D%5E%7Bk%7D%3Dcos%282%5Cpi%5Ccdot%5Cfrac%7Bk%7D%7Bn%7D%29%2Bi%5Ccdot+sin%282%5Cpi%5Ccdot%5Cfrac%7Bk%7D%7Bn%7D%29& alt=&\omega_{n}^{k}=cos(2\pi\cdot\frac{k}{n})+i\cdot sin(2\pi\cdot\frac{k}{n})& eeimg=&1&&&/p&&p&关于单位根有两个性质&/p&&p&&br&&/p&&p&&b&性质一(又称为折半引理):&/b&&/p&&p&&br&&/p&&blockquote&&img src=&https://www.zhihu.com/equation?tex=%5Comega_%7B2n%7D%5E%7B2k%7D%3D%5Comega_%7Bn%7D%5E%7Bk%7D& alt=&\omega_{2n}^{2k}=\omega_{n}^{k}& eeimg=&1&&&/blockquote&&p&证明一:&/p&&p&由几何意义,这两者表示的向量终点是一样的。&/p&&p&证明二:&/p&&p&由计算的公式:&/p&&p&&img src=&https://www.zhihu.com/equation?tex=%5Comega_%7B2n%7D%5E%7B2k%7D%3Dcos%282%5Cpi%5Cfrac%7B2k%7D%7B2n%7D%29%2Bi%5Ccdot+sin%282%5Cpi%5Cfrac%7B2k%7D%7B2n%7D%29%3Dcos%282%5Cpi%5Cfrac%7Bk%7D%7Bn%7D%29%2Bi%5Ccdot+sin%282%5Cpi%5Cfrac%7Bk%7D%7Bn%7D%29%3D%5Comega_%7Bn%7D%5E%7Bk%7D& alt=&\omega_{2n}^{2k}=cos(2\pi\frac{2k}{2n})+i\cdot sin(2\pi\frac{2k}{2n})=cos(2\pi\frac{k}{n})+i\cdot sin(2\pi\frac{k}{n})=\omega_{n}^{k}& eeimg=&1&&&/p&&p&其实由此我们可以引申出&/p&&blockquote&&img src=&https://www.zhihu.com/equation?tex=%5Comega_%7Bmn%7D%5E%7Bmk%7D%3D%5Comega_%7Bn%7D%5E%7Bk%7D& alt=&\omega_{mn}^{mk}=\omega_{n}^{k}& eeimg=&1&&&/blockquote&&p&&b&性质二(又称为消去引理)&/b&&/p&&blockquote&&img src=&https://www.zhihu.com/equation?tex=%5Comega_%7Bn%7D%5E%7Bk%2B%5Cfrac%7Bn%7D%7B2%7D%7D%3D-%5Comega_%7Bn%7D%5E%7Bk%7D+& alt=&\omega_{n}^{k+\frac{n}{2}}=-\omega_{n}^{k} & eeimg=&1&&&/blockquote&&p&证明一:&/p&&p&由几何意义,这两者表示的向量终点是相反的,左边较右边在单位圆上多转了半圈。&/p&&p&证明二:&/p&&p&由计算的公式:&/p&&p&&img src=&https://www.zhihu.com/equation?tex=%5Comega_%7Bn%7D%5E%7Bk%2B%5Cfrac%7Bn%7D%7B2%7D%7D%3Dcos%282%5Cpi%5Cfrac%7Bk%2B%5Cfrac%7Bn%7D%7B2%7D%7D%7Bn%7D%29%2Bi%5Ccdot+sin%282%5Cpi%5Cfrac%7Bk%2B%5Cfrac%7Bn%7D%7B2%7D%7D%7Bn%7D%29%3Dcos%282%5Cpi%5Cfrac%7Bk%7D%7Bn%7D%2B%5Cpi%29%2Bi%5Ccdot+sin%282%5Cpi%5Cfrac%7Bk%7D%7Bn%7D%2B%5Cpi%29%3D-cos%282%5Cpi%5Cfrac%7Bk%7D%7Bn%7D%29-i%5Ccdot+sin%282%5Cpi%5Cfrac%7Bk%7D%7Bn%7D%29%3D-%5Comega_%7Bn%7D%5E%7Bk%7D& alt=&\omega_{n}^{k+\frac{n}{2}}=cos(2\pi\frac{k+\frac{n}{2}}{n})+i\cdot sin(2\pi\frac{k+\frac{n}{2}}{n})=cos(2\pi\frac{k}{n}+\pi)+i\cdot sin(2\pi\frac{k}{n}+\pi)=-cos(2\pi\frac{k}{n})-i\cdot sin(2\pi\frac{k}{n})=-\omega_{n}^{k}& eeimg=&1&&&/p&&p&最后一步由三角恒等变换得到。&/p&&hr&&h2&&b&0x04
离散傅里叶变换(Discrete Fourier Transform)&/b&&/h2&&p&首先我们单独考虑一个 &img src=&https://www.zhihu.com/equation?tex=n& alt=&n& eeimg=&1&& 项( &img src=&https://www.zhihu.com/equation?tex=n%3D2%5Ex& alt=&n=2^x& eeimg=&1&& )的多项式 &img src=&https://www.zhihu.com/equation?tex=A%28x%29& alt=&A(x)& eeimg=&1&& ,其系数向量为 &img src=&https://www.zhihu.com/equation?tex=%28a_0%2Ca_1%2Ca_2%2C...%2Ca_%7Bn-1%7D%29& alt=&(a_0,a_1,a_2,...,a_{n-1})& eeimg=&1&& 。我们将 &img src=&https://www.zhihu.com/equation?tex=n& alt=&n& eeimg=&1&& 次单位根的 &img src=&https://www.zhihu.com/equation?tex=0& alt=&0& eeimg=&1&& ~ &img src=&https://www.zhihu.com/equation?tex=n-1& alt=&n-1& eeimg=&1&& 次幂分别带入 &img src=&https://www.zhihu.com/equation?tex=A%28x%29& alt=&A(x)& eeimg=&1&& 得到其点值向量 &img src=&https://www.zhihu.com/equation?tex=%28A%28w_n%5E%7B0%7D%29%2CA%28w_n%5E%7B1%7D%29%2CA%28w_n%5E%7B2%7D%29%2C...%2CA%28w_n%5E%7Bn-1%7D%29%29& alt=&(A(w_n^{0}),A(w_n^{1}),A(w_n^{2}),...,A(w_n^{n-1}))& eeimg=&1&& 。&/p&&p&这个过程称为&b&离散傅里叶变换(Discrete Fourier Transform)&/b&。&/p&&p&如果朴素带入,时间复杂度也是 &img src=&https://www.zhihu.com/equation?tex=O%28n%5E2%29& alt=&O(n^2)& eeimg=&1&& 的。&/p&&p&所以我们必须要利用到单位根 &img src=&https://www.zhihu.com/equation?tex=%5Comega& alt=&\omega& eeimg=&1&& 的特殊性质。&/p&&p&对于 &img src=&https://www.zhihu.com/equation?tex=A%28x%29%3Da_0%2Ba_1%5Ccdot+x%5E1%2Ba_2%5Ccdot+x%5E2%2Ba_3%5Ccdot+x%5E3%2B...%2Ba_%7Bn-1%7D%5Ccdot+x%5E%7Bn-1%7D& alt=&A(x)=a_0+a_1\cdot x^1+a_2\cdot x^2+a_3\cdot x^3+...+a_{n-1}\cdot x^{n-1}& eeimg=&1&&&/p&&p&考虑将其按照奇偶分组&/p&&p&&img src=&https://www.zhihu.com/equation?tex=A%28x%29%3D%28a_0%2Ba_2%5Ccdot+x%5E2%2Ba_%7B4%7D%5Ccdot+x%5E%7B4%7D...%2Ba_%7Bn-2%7D%5Ccdot+x%5E%7Bn-2%7D%29%2B%28a_1%5Ccdot+x%5E1%2Ba_3%5Ccdot+x%5E3%2Ba_%7B5%7D%5Ccdot+x%5E%7B5%7D%2B...%2Ba_%7Bn-1%7D%5Ccdot+x%5E%7Bn-1%7D%29& alt=&A(x)=(a_0+a_2\cdot x^2+a_{4}\cdot x^{4}...+a_{n-2}\cdot x^{n-2})+(a_1\cdot x^1+a_3\cdot x^3+a_{5}\cdot x^{5}+...+a_{n-1}\cdot x^{n-1})& eeimg=&1&&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=A%28x%29%3D%28a_0%2Ba_2%5Ccdot+x%5E2%2Ba_%7B4%7D%5Ccdot+x%5E%7B4%7D...%2Ba_%7Bn-2%7D%5Ccdot+x%5E%7Bn-2%7D%29%2Bx%5Ccdot%28a_1%2Ba_3%5Ccdot+x%5E2%2Ba_%7B5%7D%5Ccdot+x%5E%7B4%7D%2B...%2Ba_%7Bn-1%7D%5Ccdot+x%5E%7Bn-2%7D%29& alt=&A(x)=(a_0+a_2\cdot x^2+a_{4}\cdot x^{4}...+a_{n-2}\cdot x^{n-2})+x\cdot(a_1+a_3\cdot x^2+a_{5}\cdot x^{4}+...+a_{n-1}\cdot x^{n-2})& eeimg=&1&&&/p&&p&令&/p&&p&&img src=&https://www.zhihu.com/equation?tex=A1%28x%29%3D%28a_0%2Ba_2%5Ccdot+x%2Ba_%7B4%7D%5Ccdot+x%5E%7B2%7D...%2Ba_%7Bn-2%7D%5Ccdot+x%5E%7B%5Cfrac%7Bn-2%7D%7B2%7D%7D%29& alt=&A1(x)=(a_0+a_2\cdot x+a_{4}\cdot x^{2}...+a_{n-2}\cdot x^{\frac{n-2}{2}})& eeimg=&1&&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=A2%28x%29%3D%28a_1%2Ba_3%5Ccdot+x%2Ba_%7B5%7D%5Ccdot+x%5E%7B2%7D...%2Ba_%7Bn-1%7D%5Ccdot+x%5E%7B%5Cfrac%7Bn-2%7D%7B2%7D%7D%29& alt=&A2(x)=(a_1+a_3\cdot x+a_{5}\cdot x^{2}...+a_{n-1}\cdot x^{\frac{n-2}{2}})& eeimg=&1&&&/p&&p&则可得到&/p&&p&&img src=&https://www.zhihu.com/equation?tex=A%28x%29%3DA1%28x%5E2%29%2Bx%5Ccdot+A2%28x%5E2%29& alt=&A(x)=A1(x^2)+x\cdot A2(x^2)& eeimg=&1&&&/p&&p&分类讨论&/p&&p&设 &img src=&https://www.zhihu.com/equation?tex=0%5Cleq+k%5Cleq+%5Cfrac%7Bn%7D%7B2%7D-1& alt=&0\leq k\leq \frac{n}{2}-1& eeimg=&1&& , &img src=&https://www.zhihu.com/equation?tex=k%5Cin+Z& alt=&k\in Z& eeimg=&1&&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=A%28%5Comega_%7Bn%7D%5E%7Bk%7D%29%3DA1%28%5Comega_%7Bn%7D%5E%7B2k%7D%29%2B%5Comega_%7Bn%7D%5E%7Bk%7D%5Ccdot+A2%28%5Comega_%7Bn%7D%5E%7B2k%7D%29& alt=&A(\omega_{n}^{k})=A1(\omega_{n}^{2k})+\omega_{n}^{k}\cdot A2(\omega_{n}^{2k})& eeimg=&1&&&/p&&p&由上文提到的&b&折半引理&/b&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=A%28%5Comega_%7Bn%7D%5E%7Bk%7D%29%3DA1%28%5Comega_%7B%5Cfrac%7Bn%7D%7B2%7D%7D%5E%7Bk%7D%29%2B%5Comega_%7Bn%7D%5E%7Bk%7D%5Ccdot+A2%28%5Comega_%7B%5Cfrac%7Bn%7D%7B2%7D%7D%5E%7Bk%7D%29& alt=&A(\omega_{n}^{k})=A1(\omega_{\frac{n}{2}}^{k})+\omega_{n}^{k}\cdot A2(\omega_{\frac{n}{2}}^{k})& eeimg=&1&&&/p&&p&&br&&/p&&p&对于 &img src=&https://www.zhihu.com/equation?tex=%5Cfrac%7Bn%7D%7B2%7D%5Cleq+k%2B%5Cfrac%7Bn%7D%7B2%7D%5Cleq+n-1& alt=&\frac{n}{2}\leq k+\frac{n}{2}\leq n-1& eeimg=&1&&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=A%28%5Comega_%7Bn%7D%5E%7Bk%2B%5Cfrac%7Bn%7D%7B2%7D%7D%29%3DA1%28%5Comega_%7Bn%7D%5E%7B2k%2Bn%7D%29%2B%5Comega_%7Bn%7D%5E%7Bk%2B%5Cfrac%7Bn%7D%7B2%7D%7D%5Ccdot+A2%28%5Comega_%7Bn%7D%5E%7B2k%2Bn%7D%29& alt=&A(\omega_{n}^{k+\frac{n}{2}})=A1(\omega_{n}^{2k+n})+\omega_{n}^{k+\frac{n}{2}}\cdot A2(\omega_{n}^{2k+n})& eeimg=&1&&&/p&&p&其中 &img src=&https://www.zhihu.com/equation?tex=%5Comega_%7Bn%7D%5E%7B2k%2Bn%7D%3D%5Comega_%7Bn%7D%5E%7B2k%7D%5Ccdot+%5Comega_%7Bn%7D%5E%7Bn%7D%3D%5Comega_%7Bn%7D%5E%7B2k%7D%3D%5Comega_%7B%5Cfrac%7Bn%7D%7B2%7D%7D%5E%7Bk%7D& alt=&\omega_{n}^{2k+n}=\omega_{n}^{2k}\cdot \omega_{n}^{n}=\omega_{n}^{2k}=\omega_{\frac{n}{2}}^{k}& eeimg=&1&&&/p&&p&由消去引理 &img src=&https://www.zhihu.com/equation?tex=%5Comega_%7Bn%7D%5E%7Bk%2B%5Cfrac%7Bn%7D%7B2%7D%7D%3D-%5Comega_%7Bn%7D%5E%7Bk%7D& alt=&\omega_{n}^{k+\frac{n}{2}}=-\omega_{n}^{k}& eeimg=&1&&&/p&&p&故 &img src=&https://www.zhihu.com/equation?tex=A%28%5Comega_%7Bn%7D%5E%7Bk%2B%5Cfrac%7Bn%7D%7B2%7D%7D%29%3DA1%28%5Comega_%7B%5Cfrac%7Bn%7D%7B2%7D%7D%5E%7Bk%7D%29-%5Comega_%7Bn%7D%5E%7Bk%7D%5Ccdot+A2%28%5Comega_%7B%5Cfrac%7Bn%7D%7B2%7D%7D%5E%7Bk%7D%29& alt=&A(\omega_{n}^{k+\frac{n}{2}})=A1(\omega_{\frac{n}{2}}^{k})-\omega_{n}^{k}\cdot A2(\omega_{\frac{n}{2}}^{k})& eeimg=&1&&&/p&&p&注意, &img src=&https://www.zhihu.com/equation?tex=k& alt=&k& eeimg=&1&& 与 &img src=&https://www.zhihu.com/equation?tex=k%2B%5Cfrac%7Bn%7D%7B2%7D& alt=&k+\frac{n}{2}& eeimg=&1&& 取遍了 &img src=&https://www.zhihu.com/equation?tex=%5B0%2Cn-1%5D& alt=&[0,n-1]& eeimg=&1&& 中的 &img src=&https://www.zhihu.com/equation?tex=n& alt=&n& eeimg=&1&& 个整数,保证了可以由这 &img src=&https://www.zhihu.com/equation?tex=n& alt=&n& eeimg=&1&& 个点值反推解出系数(上文已证明)。&/p&&p&&br&&/p&&p&于是我们可以知道&/p&&p&如果已知了 &img src=&https://www.zhihu.com/equation?tex=A1%28x%29%2CA2%28x%29& alt=&A1(x),A2(x)& eeimg=&1&& 分别在 &img src=&https://www.zhihu.com/equation?tex=%5Comega_%7B%5Cfrac%7Bn%7D%7B2%7D%7D%5E%7B0%7D%2C%5Comega_%7B%5Cfrac%7Bn%7D%7B2%7D%7D%5E%7B1%7D%2C...%2C%5Comega_%7B%5Cfrac%7Bn%7D%7B2%7D%7D%5E%7B%5Cfrac%7Bn%7D%7B2%7D-1%7D%2C& alt=&\omega_{\frac{n}{2}}^{0},\omega_{\frac{n}{2}}^{1},...,\omega_{\frac{n}{2}}^{\frac{n}{2}-1},& eeimg=&1&& 的取值,可以在 &img src=&https://www.zhihu.com/equation?tex=O%28n%29& alt=&O(n)& eeimg=&1&& 的时间内求出 &img src=&https://www.zhihu.com/equation?tex=A%28x%29& alt=&A(x)& eeimg=&1&& 的取值。&/p&&p&而 &img src=&https://www.zhihu.com/equation?tex=A1%28x%29%2CA2%28x%29& alt=&A1(x),A2(x)& eeimg=&1&& 都是 &img src=&https://www.zhihu.com/equation?tex=A%28x%29& alt=&A(x)& eeimg=&1&& 一半的规模,显然可以转化为子问题递归求解。&/p&&p&时间复杂度:&/p&&p&&img src=&https://www.zhihu.com/equation?tex=T%28n%29%3D2T%28%5Cfrac%7Bn%7D%7B2%7D%29%2BO%28n%29%3DO%28nlogn%29& alt=&T(n)=2T(\frac{n}{2})+O(n)=O(nlogn)& eeimg=&1&&&/p&&hr&&p&&br&&/p&&p&&br&&/p&&h2&&b&0x05
离散傅里叶反变换(Inverse Discrete Fourier Transform)&/b&&/h2&&p&&br&&/p&&p&使用快速傅里叶变换将点值表示的多项式转化为系数表示,这个过程叫做&b&离散傅里叶反变换(Inverse Discrete Fourier Transform)&/b&。&/p&&p&&br&&/p&&p&即由 &img src=&https://www.zhihu.com/equation?tex=n& alt=&n& eeimg=&1&& 维点值向量 &img src=&https://www.zhihu.com/equation?tex=%28A%28x_0%29%2CA%28x_1%29%2C...%2CA%28x_%7Bn-1%7D%29%29& alt=&(A(x_0),A(x_1),...,A(x_{n-1}))& eeimg=&1&& 推出 &img src=&https://www.zhihu.com/equation?tex=n& alt=&n& eeimg=&1&& 维系数向量&img src=&https://www.zhihu.com/equation?tex=%28a_0%2Ca_1%2C...%2Ca_%7Bn-1%7D%29& alt=&(a_0,a_1,...,a_{n-1})& eeimg=&1&& 。&/p&&p&&br&&/p&&p&设 &img src=&https://www.zhihu.com/equation?tex=%28d_0%2Cd_1%2C...%2Cd_%7Bn-1%7D%29& alt=&(d_0,d_1,...,d_{n-1})& eeimg=&1&& 为 &img src=&https://www.zhihu.com/equation?tex=%28a_0%2Ca_1%2C...%2Ca_%7Bn-1%7D%29& alt=&(a_0,a_1,...,a_{n-1})& eeimg=&1&& 得到的离散傅里叶变换的结果。&/p&&p&&br&&/p&&p&我们构造一个多项式 &img src=&https://www.zhihu.com/equation?tex=F%28x%29%3Dd_0%2Bd_1%5Ccdot+x%2Bd_2%5Ccdot+x%5E2%2B...%2Bd_%7Bn-1%7D%5Ccdot+x%5E%7Bn-1%7D& alt=&F(x)=d_0+d_1\cdot x+d_2\cdot x^2+...+d_{n-1}\cdot x^{n-1}& eeimg=&1&&&/p&&p&设向量 &img src=&https://www.zhihu.com/equation?tex=%28c_0%2Cc_1%2C...%2Cc_%7Bn-1%7D%29& alt=&(c_0,c_1,...,c_{n-1})& eeimg=&1&& 中&/p&&p&&img src=&https://www.zhihu.com/equation?tex=c_k& alt=&c_k& eeimg=&1&& 为 &img src=&https://www.zhihu.com/equation?tex=F%28x%29& alt=&F(x)& eeimg=&1&& 在 &img src=&https://www.zhihu.com/equation?tex=x%3D%5Comega_%7Bn%7D%5E%7B-k%7D& alt=&x=\omega_{n}^{-k}& eeimg=&1&& 的点值表示&/p&&p&即 &img src=&https://www.zhihu.com/equation?tex=c_k%3D%5Csum_%7Bi%3D0%7D%5E%7Bn-1%7Dd_i%5Ccdot%28%5Comega_%7Bn%7D%5E%7B-k%7D%29%5Ei& alt=&c_k=\sum_{i=0}^{n-1}d_i\cdot(\omega_{n}^{-k})^i& eeimg=&1&& ,&/p&&p&我们考虑对 &img src=&https://www.zhihu.com/equation?tex=d_i& alt=&d_i& eeimg=&1&& 进行还原&/p&&p&于是&/p&&p&&img src=&https://www.zhihu.com/equation?tex=c_k%3D%5Csum_%7Bi%3D0%7D%5E%7Bn-1%7D%5B%5Csum_%7Bj%3D0%7D%5E%7Bn-1%7Da_j%5Ccdot%28%5Comega_%7Bn%7D%5E%7Bi%7D%29%5Ej%5D%5Ccdot%28%5Comega_%7Bn%7D%5E%7B-k%7D%29%5Ei& alt=&c_k=\sum_{i=0}^{n-1}[\sum_{j=0}^{n-1}a_j\cdot(\omega_{n}^{i})^j]\cdot(\omega_{n}^{-k})^i& eeimg=&1&&&/p&&p&由和式的性质&/p&&p&&br&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=c_k%3D%5Csum_%7Bj%3D0%7D%5E%7Bn-1%7Da_j%5Csum_%7Bi%3D0%7D%5E%7Bn-1%7D%28%5Comega_%7Bn%7D%5E%7Bi%7D%29%5Ej%5Ccdot%28%5Comega_%7Bn%7D%5E%7B-k%7D%29%5Ei& alt=&c_k=\sum_{j=0}^{n-1}a_j\sum_{i=0}^{n-1}(\omega_{n}^{i})^j\cdot(\omega_{n}^{-k})^i& eeimg=&1&&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=%3D%5Csum_%7Bj%3D0%7D%5E%7Bn-1%7Da_j%5Csum_%7Bi%3D0%7D%5E%7Bn-1%7D%28%5Comega_%7Bn%7D%5E%7Bi%7D%29%5E%7Bj-k%7D& alt=&=\sum_{j=0}^{n-1}a_j\sum_{i=0}^{n-1}(\omega_{n}^{i})^{j-k}& eeimg=&1&&&/p&&p&令 &img src=&https://www.zhihu.com/equation?tex=S%28j%2Ck%29%3D%5Csum_%7Bi%3D0%7D%5E%7Bn-1%7D%28%5Comega_%7Bn%7D%5E%7Bi%7D%29%5E%7Bj-k%7D& alt=&S(j,k)=\sum_{i=0}^{n-1}(\omega_{n}^{i})^{j-k}& eeimg=&1&&&/p&&p&对其进行化简&/p&&p&设 &img src=&https://www.zhihu.com/equation?tex=j-k%3D%5Cdelta& alt=&j-k=\delta& eeimg=&1&&&/p&&p&则 &img src=&https://www.zhihu.com/equation?tex=S%28j%2Ck%29%3D%5Comega_%7Bn%7D%5E%7B0%7D%2B%5Comega_%7Bn%7D%5E%7B%5Cdelta%7D%2B%5Comega_%7Bn%7D%5E%7B2%5Cdelta%7D%2B...%2B%5Comega_%7Bn%7D%5E%7B%28n-1%29%5Cdelta%7D& alt=&S(j,k)=\omega_{n}^{0}+\omega_{n}^{\delta}+\omega_{n}^{2\delta}+...+\omega_{n}^{(n-1)\delta}& eeimg=&1&&&/p&&p&其公比为 &img src=&https://www.zhihu.com/equation?tex=%5Comega_%7Bn%7D%5E%7B%5Cdelta%7D& alt=&\omega_{n}^{\delta}& eeimg=&1&&&/p&&p&当 &img src=&https://www.zhihu.com/equation?tex=%5Comega_%7Bn%7D%5E%7B%5Cdelta%7D%3D1& alt=&\omega_{n}^{\delta}=1& eeimg=&1&& 即 &img src=&https://www.zhihu.com/equation?tex=%5Cdelta%3D0& alt=&\delta=0& eeimg=&1&& 时&/p&&p&&img src=&https://www.zhihu.com/equation?tex=S%28j%2Ck%29%3Dn& alt=&S(j,k)=n& eeimg=&1&& 此时 &img src=&https://www.zhihu.com/equation?tex=%5Cdelta%3D0%5CRightarrow+j-k%3D0+%5CRightarrow+j%3Dk& alt=&\delta=0\Rightarrow j-k=0 \Rightarrow j=k& eeimg=&1&&&/p&&p&当 &img src=&https://www.zhihu.com/equation?tex=%5Comega_%7Bn%7D%5E%7B%5Cdelta%7D%5Cne1& alt=&\omega_{n}^{\delta}\ne1& eeimg=&1&& 即 &img src=&https://www.zhihu.com/equation?tex=%5Cdelta%5Cne0& alt=&\delta\ne0& eeimg=&1&& 时&/p&&p&由等比数列求和公式&/p&&p&&img src=&https://www.zhihu.com/equation?tex=S%28j%2Ck%29%3D%5Cfrac%7B%28%5Comega_%7Bn%7D%5E%7B%5Cdelta%7D%29%5E%7Bn%7D-1%7D%7B%5Comega_%7Bn%7D%5E%7B%5Cdelta%7D%7D%3D%5Cfrac%7B%28%5Comega_%7Bn%7D%5E%7Bn%7D%29%5E%7B%5Cdelta%7D-1%7D%7B%5Comega_%7Bn%7D%5E%7B%5Cdelta%7D%7D%3D%5Cfrac%7B%281%29%5E%7B%5Cdelta%7D-1%7D%7B%5Comega_%7Bn%7D%5E%7B%5Cdelta%7D%7D%3D%5Cfrac%7B0%7D%7B%5Comega_%7Bn%7D%5E%7B%5Cdelta%7D%7D%3D0& alt=&S(j,k)=\frac{(\omega_{n}^{\delta})^{n}-1}{\omega_{n}^{\delta}}=\frac{(\omega_{n}^{n})^{\delta}-1}{\omega_{n}^{\delta}}=\frac{(1)^{\delta}-1}{\omega_{n}^{\delta}}=\frac{0}{\omega_{n}^{\delta}}=0& eeimg=&1&& ,此时 &img src=&https://www.zhihu.com/equation?tex=j%5Cne+k& alt=&j\ne k& eeimg=&1&& .&/p&&p&所以&/p&&p&&img src=&https://www.zhihu.com/equation?tex=S%28j%2Ck%29%3D%5Bj%3Dk%5D%5Ccdot+n& alt=&S(j,k)=[j=k]\cdot n& eeimg=&1&&&/p&&p&&br&&/p&&p&将 &img src=&https://www.zhihu.com/equation?tex=S%28j%2Ck%29& alt=&S(j,k)& eeimg=&1&& 带入原式&/p&&p&&img src=&https://www.zhihu.com/equation?tex=c_k%3D%5Csum_%7Bj%3D0%7D%5E%7Bn-1%7Da_j%5Ccdot+S%28j%2Ck%29%3D%5Csum_%7Bj%3D0%7D%5E%7Bn-1%7Da_j%5Ccdot+%5Bj%3Dk%5D%5Ccdot+n%3Da_k%5Ccdot+n& alt=&c_k=\sum_{j=0}^{n-1}a_j\cdot S(j,k)=\sum_{j=0}^{n-1}a_j\cdot [j=k]\cdot n=a_k\cdot n& eeimg=&1&&&/p&&p&所以 &img src=&https://www.zhihu.com/equation?tex=a_k%3D%5Cfrac%7Bc_k%7D%7Bn%7D& alt=&a_k=\frac{c_k}{n}& eeimg=&1&& .&/p&&p&其中 &img src=&https://www.zhihu.com/equation?tex=a_k& alt=&a_k& eeimg=&1&& 为原多项式 &img src=&https://www.zhihu.com/equation?tex=A%28x%29& alt=&A(x)& eeimg=&1&& 的系数向量 &img src=&https://www.zhihu.com/equation?tex=%28a_0%2Ca_1%2C...%2Ca_n%29& alt=&(a_0,a_1,...,a_n)& eeimg=&1&& 中的 &img src=&https://www.zhihu.com/equation?tex=a_k& alt=&a_k& eeimg=&1&& .&/p&&p&&b&由此得到:&/b&&/p&&p&对于多项式 &img src=&https://www.zhihu.com/equation?tex=A%28x%29& alt=&A(x)& eeimg=&1&& 由插值节点 &img src=&https://www.zhihu.com/equation?tex=%28%5Comega_%7Bn%7D%5E%7B0%7D%2C%5Comega_%7Bn%7D%5E%7B1%7D%2C%5Comega_%7Bn%7D%5E%7B2%7D%2C...%2C%5Comega_%7Bn%7D%5E%7Bn-1%7D%29& alt=&(\omega_{n}^{0},\omega_{n}^{1},\omega_{n}^{2},...,\omega_{n}^{n-1})& eeimg=&1&& 做离散傅里叶变换得到的点值向量 &img src=&https://www.zhihu.com/equation?tex=%28d_0%2Cd_1%2C...%2Cd_%7Bn-1%7D%29& alt=&(d_0,d_1,...,d_{n-1})& eeimg=&1&& 。我们将 &img src=&https://www.zhihu.com/equation?tex=%28%5Comega_%7Bn%7D%5E%7B0%7D%2C%5Comega_%7Bn%7D%5E%7B-1%7D%2C%5Comega_%7Bn%7D%5E%7B-2%7D%2C...%2C%5Comega_%7Bn%7D%5E%7B-%28n-1%29%7D%29& alt=&(\omega_{n}^{0},\omega_{n}^{-1},\omega_{n}^{-2},...,\omega_{n}^{-(n-1)})& eeimg=&1&& 作为插值节点,&img src=&https://www.zhihu.com/equation?tex=%28d_0%2Cd_1%2C...%2Cd_%7Bn-1%7D%29& alt=&(d_0,d_1,...,d_{n-1})& eeimg=&1&& 作为系数向量,做一次离散傅里叶变换得到的向量每一项都除以 &img src=&https://www.zhihu.com/equation?tex=n& alt=&n& eeimg=&1&& 之后得到的&img src=&https://www.zhihu.com/equation?tex=%28%5Cfrac%7Bc_0%7D%7Bn%7D%2C%5Cfrac%7Bc_1%7D%7Bn%7D%2C...%2C%5Cfrac%7Bc_%7Bn-1%7D%7D%7Bn%7D%29& alt=&(\frac{c_0}{n},\frac{c_1}{n},...,\frac{c_{n-1}}{n})& eeimg=&1&& 就是多项式的系数向量 &img src=&https://www.zhihu.com/equation?tex=%28a_0%2Ca_1%2C...%2Ca_%7Bn-1%7D%29& alt=&(a_0,a_1,...,a_{n-1})& eeimg=&1&& 。&/p&&p&注意到 &img src=&https://www.zhihu.com/equation?tex=%5Comega_%7Bn%7D%5E%7B-k%7D& alt=&\omega_{n}^{-k}& eeimg=&1&& 是 &img src=&https://www.zhihu.com/equation?tex=%5Comega_%7Bn%7D%5E%7Bk%7D& alt=&\omega_{n}^{k}& eeimg=&1&& 的共轭复数。&/p&&p&&br&&/p&&p&这个过程称为&b&离散傅里叶反变换。&/b&&/p&&hr&&h2&&b&0x06
关于FFT在C++的实现&/b&&/h2&&p&&br&&/p&&p&&br&&/p&&p&首先要解决复数运算的问题,我们可以使用C++STL自带的 &img src=&https://www.zhihu.com/equation?tex=std+%3A%3A+complex+%3C+T+%3E& alt=&std :: complex & T && eeimg=&1&& 依照精度要求 &img src=&https://www.zhihu.com/equation?tex=T& alt=&T& eeimg=&1&& 一般为 &img src=&https://www.zhihu.com/equation?tex=double%2Clong%5C%3Bdouble& alt=&double,long\;double& eeimg=&1&& 。&/p&&p&也可以自己封装,下面是我封装的复数类。&/p&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-cpp&&&span&&/span&&span class=&k&&struct&/span& &span class=&n&&Complex&/span&
&span class=&p&&{&/span&
&span class=&kt&&double&/span& &span class=&n&&r&/span&&span class=&p&&,&/span& &span class=&n&&i&/span& &span class=&p&&;&/span&
&span class=&n&&Complex&/span& &span class=&p&&(&/span& &span class=&p&&)&/span&
&span class=&p&&{&/span& &span class=&p&&}&/span&
&span class=&n&&Complex&/span& &span class=&p&&(&/span& &span class=&kt&&double&/span& &span class=&n&&r&/span&&span class=&p&&,&/span& &span class=&kt&&double&/span& &span class=&n&&i&/span& &span class=&p&&)&/span& &span class=&o&&:&/span& &span class=&n&&r&/span& &span class=&p&&(&/span& &span class=&n&&r&/span& &span class=&p&&),&/span& &span class=&n&&i&/span& &span class=&p&&(&/span& &span class=&n&&i&/span& &span class=&p&&)&/span&
&span class=&p&&{&/span& &span class=&p&&}&/span&
&span class=&kr&&inline&/span& &span class=&kt&&void&/span& &span class=&n&&real&/span& &span class=&p&&(&/span& &span class=&k&&const&/span& &span class=&kt&&double&/span&&span class=&o&&&&/span& &span class=&n&&x&/span& &span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&n&&r&/span& &span class=&o&&=&/span& &span class=&n&&x&/span& &span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&kr&&inline&/span& &span class=&kt&&double&/span& &span class=&n&&real&/span& &span class=&p&&(&/span& &span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&k&&return&/span& &span class=&n&&r&/span& &span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&kr&&inline&/span& &span class=&n&&Complex&/span& &span class=&k&&operator&/span& &span class=&o&&+&/span& &span class=&p&&(&/span& &span class=&k&&const&/span& &span class=&n&&Complex&/span&&span class=&o&&&&/span& &span class=&n&&rhs&/span& &span class=&p&&)&/span&
&span class=&k&&const&/span&
&span class=&p&&{&/span&
&span class=&k&&return&/span& &span class=&n&&Complex&/span& &span class=&p&&(&/span& &span class=&n&&r&/span& &span class=&o&&+&/span& &span class=&n&&rhs&/span&&span class=&p&&.&/span&&span class=&n&&r&/span&&span class=&p&&,&/span& &span class=&n&&i&/span& &span class=&o&&+&/span& &span class=&n&&rhs&/span&&span class=&p&&.&/span&&span class=&n&&i&/span& &span class=&p&&)&/span& &span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&kr&&inline&/span& &span class=&n&&Complex&/span& &span class=&k&&operator&/span& &span class=&o&&-&/span& &span class=&p&&(&/span& &span class=&k&&const&/span& &span class=&n&&Complex&/span&&span class=&o&&&&/span& &span class=&n&&rhs&/span& &span class=&p&&)&/span&
&span class=&k&&const&/span&
&span class=&p&&{&/span&
&span class=&k&&return&/span& &span class=&n&&Complex&/span& &span class=&p&&(&/span& &span class=&n&&r&/span& &span class=&o&&-&/span& &span class=&n&&rhs&/span&&span class=&p&&.&/span&&span class=&n&&r&/span&&span class=&p&&,&/span& &span class=&n&&i&/span& &span class=&o&&-&/span& &span class=&n&&rhs&/span&&span class=&p&&.&/span&&span class=&n&&i&/span& &span class=&p&&)&/span& &span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&kr&&inline&/span& &span class=&n&&Complex&/span& &span class=&k&&operator&/span& &span class=&o&&*&/span& &span class=&p&&(&/span& &span class=&k&&const&/span& &span class=&n&&Complex&/span&&span class=&o&&&&/span& &span class=&n&&rhs&/span& &span class=&p&&)&/span&
&span class=&k&&const&/span&
&span class=&p&&{&/span&
&span class=&k&&return&/span& &span class=&n&&Complex&/span& &span class=&p&&(&/span& &span class=&n&&r&/span& &span class=&o&&*&/span& &span class=&n&&rhs&/span&&span class=&p&&.&/span&&span class=&n&&r&/span& &span class=&o&&-&/span& &span class=&n&&i&/span& &span class=&o&&*&/span& &span class=&n&&rhs&/span&&span class=&p&&.&/span&&span class=&n&&i&/span&&span class=&p&&,&/span& &span class=&n&&r&/span& &span class=&o&&*&/span& &span class=&n&&rhs&/span&&span class=&p&&.&/span&&span class=&n&&i&/span& &span class=&o&&+&/span& &span class=&n&&i&/span& &span class=&o&&*&/span& &span class=&n&&rhs&/span&&span class=&p&&.&/span&&span class=&n&&r&/span& &span class=&p&&)&/span& &span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&kr&&inline&/span& &span class=&kt&&void&/span& &span class=&k&&operator&/span& &span class=&o&&/=&/span& &span class=&p&&(&/span& &span class=&k&&const&/span& &span class=&kt&&double&/span&&span class=&o&&&&/span& &span class=&n&&x&/span& &span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&n&&r&/span& &span class=&o&&/=&/span& &span class=&n&&x&/span&&span class=&p&&,&/span& &span class=&n&&i&/span& &span class=&o&&/=&/span& &span class=&n&&x&/span& &span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&kr&&inline&/span& &span class=&kt&&void&/span& &span class=&k&&operator&/span& &span class=&o&&*=&/span& &span class=&p&&(&/span& &span class=&k&&const&/span& &span class=&n&&Complex&/span&&span class=&o&&&&/span& &span class=&n&&rhs&/span& &span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&o&&*&/span&&span class=&k&&this&/span& &span class=&o&&=&/span& &span class=&n&&Complex&/span& &span class=&p&&(&/span& &span class=&n&&r&/span& &span class=&o&&*&/span& &span class=&n&&rhs&/span&&span class=&p&&.&/span&&span class=&n&&r&/span& &span class=&o&&-&/span& &span class=&n&&i&/span& &span class=&o&&*&/span& &span class=&n&&rhs&/span&&span class=&p&&.&/span&&span class=&n&&i&/span&&span class=&p&&,&/span& &span class=&n&&r&/span& &span class=&o&&*&/span& &span class=&n&&rhs&/span&&span class=&p&&.&/span&&span class=&n&&i&/span& &span class=&o&&+&/span& &span class=&n&&i&/span& &span class=&o&&*&/span& &span class=&n&&rhs&/span&&span class=&p&&.&/span&&span class=&n&&r&/span& &span class=&p&&)&/span& &span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&kr&&inline&/span& &span class=&kt&&void&/span& &span class=&k&&operator&/span& &span class=&o&&+=&/span& &span class=&p&&(&/span& &span class=&k&&const&/span& &span class=&n&&Complex&/span&&span class=&o&&&&/span& &span class=&n&&rhs&/span& &span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&n&&r&/span& &span class=&o&&+=&/span& &span class=&n&&rhs&/span&&span class=&p&&.&/span&&span class=&n&&r&/span&&span class=&p&&,&/span& &span class=&n&&i&/span& &span class=&o&&+=&/span& &span class=&n&&rhs&/span&&span class=&p&&.&/span&&span class=&n&&i&/span& &span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&kr&&inline&/span& &span class=&n&&Complex&/span& &span class=&n&&conj&/span& &span class=&p&&(&/span& &span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&k&&return&/span& &span class=&n&&Complex&/span& &span class=&p&&(&/span& &span class=&n&&r&/span&&span class=&p&&,&/span& &span class=&o&&-&/span&&span class=&n&&i&/span& &span class=&p&&)&/span& &span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&p&&}&/span& &span class=&p&&;&/span&
&/code&&/pre&&/div&&p&&br&&/p&&p&我们由上面的分析可以得到这个递归的写法。&/p&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-cpp&&&span&&/span&&span class=&kt&&bool&/span& &span class=&n&&inverse&/span& &span class=&o&&=&/span& &span class=&nb&&false&/span& &span class=&p&&;&/span&
&span class=&kr&&inline&/span& &span class=&n&&Complex&/span& &span class=&nf&&omega&/span& &span class=&p&&(&/span& &span class=&k&&const&/span& &span class=&kt&&int&/span&&span class=&o&&&&/span& &span class=&n&&n&/span&&span class=&p&&,&/span& &span class=&k&&const&/span& &span class=&kt&&int&/span&&span class=&o&&&&/span& &span class=&n&&k&/span& &span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&k&&if&/span& &span class=&p&&(&/span& &span class=&o&&!&/span& &span class=&n&&inverse&/span& &span class=&p&&)&/span& &span class=&k&&return&/span& &span class=&n&&Complex&/span& &span class=&p&&(&/span& &span class=&n&&cos&/span& &span class=&p&&(&/span& &span class=&mi&&2&/span& &span class=&o&&*&/span& &span class=&n&&PI&/span& &span class=&o&&/&/span& &span class=&n&&n&/span& &span class=&o&&*&/span& &span class=&n&&k&/span& &span class=&p&&),&/span& &span class=&n&&sin&/span& &span class=&p&&(&/span& &span class=&mi&&2&/span& &span class=&o&&*&/span& &span class=&n&&PI&/span& &span class=&o&&/&/span& &span class=&n&&n&/span& &span class=&o&&*&/span& &span class=&n&&k&/span& &span class=&p&&)&/span& &span class=&p&&)&/span& &span class=&p&&;&/span&
&span class=&k&&return&/span& &span class=&n&&Complex&/span& &span class=&p&&(&/span& &span class=&n&&cos&/span& &span class=&p&&(&/span& &span class=&mi&&2&/span& &span class=&o&&*&/span& &span class=&n&&PI&/span& &span class=&o&&/&/span& &span class=&n&&n&/span& &span class=&o&&*&/span& &span class=&n&&k&/span& &span class=&p&&),&/span& &span class=&n&&sin&/span& &span class=&p&&(&/span& &span class=&mi&&2&/span& &span class=&o&&*&/span& &span class=&n&&PI&/span& &span class=&o&&/&/span& &span class=&n&&n&/span& &span class=&o&&*&/span& &span class=&n&&k&/span& &span class=&p&&)&/span& &span class=&p&&).&/span&&span class=&n&&conj&/span& &span class=&p&&(&/span& &span class=&p&&)&/span& &span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&kr&&inline&/span& &span class=&kt&&void&/span& &span class=&nf&&fft&/span& &span class=&p&&(&/span& &span class=&n&&Complex&/span& &span class=&o&&*&/span&&span class=&n&&a&/span&&span class=&p&&,&/span& &span class=&k&&const&/span& &span class=&kt&&int&/span&&span class=&o&&&&/span& &span class=&n&&n&/span& &span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&k&&if&/span& &span class=&p&&(&/span& &span class=&n&&n&/span& &span class=&o&&==&/span& &span class=&mi&&1&/span& &span class=&p&&)&/span& &span class=&k&&return&/span& &span class=&p&&;&/span&
&span class=&k&&static&/span& &span class=&n&&Complex&/span& &span class=&n&&buf&/span& &span class=&p&&[&/span&&span class=&n&&N&/span&&span class=&p&&]&/span& &span class=&p&&;&/span&
&span class=&k&&const&/span& &span class=&kt&&int&/span& &span class=&n&&m&/span& &span class=&o&&=&/span& &span class=&n&&n&/span& &span class=&o&&&&&/span& &span class=&mi&&1&/span& &span class=&p&&;&/span&
&span class=&k&&for&/span& &span class=&p&&(&/span& &span class=&kt&&int&/span& &span class=&n&&i&/span& &span class=&o&&=&/span& &span class=&mi&&0&/span& &span class=&p&&;&/span& &span class=&n&&i&/span& &span class=&o&&&&/span& &span class=&n&&m&/span& &span class=&p&&;&/span& &span class=&o&&++&/span& &span class=&n&&i&/span& &span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&n&&buf&/span& &span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&n&&a&/span& &span class=&p&&[&/span&&span class=&n&&i&/span& &span class=&o&&&&&/span& &span class=&mi&&1&/span&&span class=&p&&]&/span& &span class=&p&&;&/span&
&span class=&n&&buf&/span& &span class=&p&&[&/span&&span class=&n&&i&/span& &span class=&o&&+&/span& &span class=&n&&m&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&n&&a&/span& &span class=&p&&[&/span&&span class=&n&&i&/span& &span class=&o&&&&&/span& &span class=&mi&&1&/span& &span class=&o&&|&/span& &span class=&mi&&1&/span&&span class=&p&&]&/span& &span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&n&&memcpy&/span& &span class=&p&&(&/span& &span class=&n&&a&/span&&span class=&p&&,&/span& &span class=&n&&buf&/span&&span class=&p&&,&/span& &span class=&k&&sizeof&/span& &span class=&p&&(&/span& &span class=&kt&&int&/span& &span class=&p&&)&/span& &span class=&o&&*&/span& &span class=&p&&(&/span& &span class=&n&&n&/span& &span class=&o&&+&/span& &span class=&mi&&1&/span& &span class=&p&&)&/span& &span class=&p&&)&/span& &span class=&p&&;&/span&
&span class=&n&&Complex&/span& &span class=&o&&*&/span&&span class=&n&&a1&/span& &span class=&o&&=&/span& &span class=&n&&a&/span&&span class=&p&&,&/span& &span class=&o&&*&/span&&span class=&n&&a2&/span& &span class=&o&&=&/span& &span class=&n&&a&/span& &span class=&o&&+&/span& &span class=&n&&m&/span&&span class=&p&&;&/span&
&span class=&n&&fft&/span& &span class=&p&&(&/span& &span class=&n&&a1&/span&&span class=&p&&,&/span& &span class=&n&&m&/span& &span class=&p&&)&/span& &span class=&p&&;&/span&
&span class=&n&&fft&/span& &span class=&p&&(&/span& &span class=&n&&a2&/span&&span class=&p&&,&/span& &span class=&n&&m&/span& &span class=&p&&)&/span& &span class=&p&&;&/span&
&span class=&k&&for&/span& &span class=&p&&(&/span& &span class=&kt&&int&/span& &span class=&n&&i&/span& &span class=&o&&=&/span& &span class=&mi&&0&/span& &span class=&p&&;&/span& &span class=&n&&i&/span& &span class=&o&&&&/span& &span class=&n&&m&/span& &span class=&p&&;&/span& &span class=&o&&++&/span& &span class=&n&&i&/span& &span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&n&&Complex&/span& &span class=&n&&t&/span& &span class=&o&&=&/span& &span class=&n&&omega&/span& &span class=&p&&(&/span& &span class=&n&&n&/span&&span class=&p&&,&/span& &span class=&n&&i&/span& &span class=&p&&)&/span& &span class=&p&&;&/span&
&span class=&n&&buf&/span& &span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&n&&a1&/span& &span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&p&&]&/span& &span class=&o&&+&/span& &span class=&n&&t&/span& &span class=&o&&*&/span& &span class=&n&&a2&/span& &span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&p&&]&/span& &span class=&p&&;&/span&
&span class=&n&&buf&/span& &span class=&p&&[&/span&&span class=&n&&i&/span& &span class=&o&&+&/span& &span class=&n&&m&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&n&&a1&/span& &span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&p&&]&/span& &span class=&o&&-&/span& &span class=&n&&t&/span& &span class=&o&&*&/span& &span class=&n&&a2&/span& &span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&p&&]&/span& &span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&n&&memcpy&/span& &span class=&p&&(&/span& &span class=&n&&a&/span&&span class=&p&&,&/span& &span class=&n&&buf&/span&&span class=&p&&,&/span& &span class=&k&&sizeof&/span& &span class=&p&&(&/span& &span class=&kt&&int&/span& &span class=&p&&)&/span& &span class=&o&&*&/span& &span class=&p&&(&/span& &span class=&n&&n&/span& &span class=&o&&+&/span& &span class=&mi&&1&/span& &span class=&p&&)&/span& &span class=&p&&)&/span& &span class=&p&&;&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&p&&br&&/p&&p&但是这样的 &img src=&https://www.zhihu.com/equation?tex=FFT& alt=&FFT& eeimg=&1&& 要用到辅助数组,并且常数比较大。&/p&&p&&br&&/p&&p&能不能优化呢?&/p&&p&&br&&/p&&p&我们把每一次分组的情况推演出来&/p&&figure&&img src=&https://pic4.zhimg.com/v2-953d1cd6c91adefe302c_b.jpg& data-size=&normal& data-rawwidth=&1046& data-rawheight=&753& class=&origin_image zh-lightbox-thumb& width=&1046& data-original=&https://pic4.zhimg.com/v2-953d1cd6c91adefe302c_r.jpg&&&figcaption&递归分类的每一层&/figcaption&&/figure&&p&观察到每一个位置的数其实都是原来位置上的数的二进制后 &img src=&https://www.zhihu.com/equation?tex=log_%7B2%7Dn& alt=&log_{2}n& eeimg=&1&& 位 &img src=&https://www.zhihu.com/equation?tex=reverse& alt=&reverse& eeimg=&1&& 了一下。&/p&&p&于是我们可以想,先将原数组调整成最底层的位置(很好调整吧)。&/p&&p&然后从倒数第二层由底向上计算。&/p&&p&&br&&/p&&p&这就是我们一般用来实现 &img src=&https://www.zhihu.com/equation?tex=FFT& alt=&FFT& eeimg=&1&& 的&img src=&https://www.zhihu.com/equation?tex=Cooley-Tukey+& alt=&Cooley-Tukey & eeimg=&1&& 算法。&/p&&p&&br&&/p&&p&考虑怎么合并?&/p&&p&在 &img src=&https://www.zhihu.com/equation?tex=Cooley-Tukey+& alt=&Cooley-Tukey & eeimg=&1&& 算法中,合并操作被称作是蝴蝶操作。&/p&&p&&br&&/p&&p&虑合并两个子问题的过程,这一层有 &img src=&https://www.zhihu.com/equation?tex=n& alt=&n& eeimg=&1&& 项需要处理。假设 &img src=&https://www.zhihu.com/equation?tex=A_1%28%5Comega_%7B+%5Cfrac%7Bn%7D%7B2%7D+%7D+%5E+k%29+& alt=&A_1(\omega_{ \frac{n}{2} } ^ k) & eeimg=&1&& 和 &img src=&https://www.zhihu.com/equation?tex=A_2%28%5Comega_%7B+%5Cfrac%7Bn%7D%7B2%7D+%7D+%5E+k%29& alt=&A_2(\omega_{ \frac{n}{2} } ^ k)& eeimg=&1&& 分别存在 &img src=&https://www.zhihu.com/equation?tex=a%28k%29& alt=&a(k)& eeimg=&1&& 和 &img src=&https://www.zhihu.com/equation?tex=a%28%5Cfrac%7Bn%7D%7B2%7D+%2B+k%29& alt=&a(\frac{n}{2} + k)& eeimg=&1&& 中, &img src=&https://www.zhihu.com/equation?tex=A%28%5Comega_n+%5E+%7Bk%7D%29& alt=&A(\omega_n ^ {k})& eeimg=&1&& 和 &img src=&https://www.zhihu.com/equation?tex=+A%28%5Comega_n+%5E+%7Bk+%2B+%5Cfrac%7Bn%7D%7B2%7D+%7D%29& alt=& A(\omega_n ^ {k + \frac{n}{2} })& eeimg=&1&& 将要被存放在 &img src=&https://www.zhihu.com/equation?tex=+buf%28k%29& alt=& buf(k)& eeimg=&1&& 和 &img src=&https://www.zhihu.com/equation?tex=buf%28%5Cfrac%7Bn%7D%7B2%7D+%2B+k%29& alt=&buf(\frac{n}{2} + k)& eeimg=&1&& 中,合并的单位操作可表示为&/p&&p&&img src=&https://www.zhihu.com/equation?tex=buf%28k%29%3A%3Da%28k%29%2B%5Comega_%7Bn%7D%5E%7Bk%7D%5Ccdot+a%28k%2B%5Cfrac%7Bn%7D%7B2%7D%29& alt=&buf(k):=a(k)+\omega_{n}^{k}\cdot a(k+\frac{n}{2})& eeimg=&1&&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=buf%28k%2B%5Cfrac%7Bn%7D%7B2%7D%29%3A%3Da%28k%29-%5Comega_%7Bn%7D%5E%7Bk%7D%5Ccdot+a%28k%2B%5Cfrac%7Bn%7D%7B2%7D%29& alt=&buf(k+\frac{n}{2}):=a(k)-\omega_{n}^{k}\cdot a(k+\frac{n}{2})& eeimg=&1&&&/p&&p&只要将合并顺序换一下,再加入一个临时变量,合并过程就可以在原数组中进行。&/p&&p&令 &img src=&https://www.zhihu.com/equation?tex=t%3A%3D%5Comega_%7Bn%7D%5E%7Bk%7D%5Ccdot+a%28k%2B%5Cfrac%7Bn%7D%7B2%7D%29& alt=&t:=\omega_{n}^{k}\cdot a(k+\frac{n}{2})& eeimg=&1&&&/p&&p&合并过程如下:&/p&&p&&img src=&https://www.zhihu.com/equation?tex=a%28k%2B%5Cfrac%7Bn%7D%7B2%7D%29%3A%3Da%28k%29-t& alt=&a(k+\frac{n}{2}):=a(k)-t& eeimg=&1&&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=a%28k%29%3A%3Da%28k%29%2Bt& alt=&a(k):=a(k)+t& eeimg=&1&& 。&/p&&p&至此,我们可以给出 &img src=&https://www.zhihu.com/equation?tex=Cooley-Tukey+& alt=&Cooley-Tukey & eeimg=&1&& 算法的实现。&/p&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-cpp&&&span&&/span&&span class=&k&&struct&/span& &span class=&n&&FastFourierTransform&/span&
&span class=&p&&{&/span&
&span class=&n&&Complex&/span& &span class=&n&&omega&/span& &span class=&p&&[&/span&&span class=&n&&N&/span&&span class=&p&&],&/span& &span class=&n&&omegaInverse&/span& &span class=&p&&[&/span&&span class=&n&&N&/span&&span class=&p&&]&/span& &span class=&p&&;&/span&
&span class=&kt&&void&/span& &span class=&nf&&init&/span& &span class=&p&&(&/span& &span class=&k&&const&/span& &span class=&kt&&int&/span&&span class=&o&&&&/span& &span class=&n&&n&/span& &span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&k&&for&/span& &span class=&p&&(&/span& &span class=&kt&&int&/span& &span class=&n&&i&/span& &span class=&o&&=&/span& &span class=&mi&&0&/span& &span class=&p&&;&/span& &span class=&n&&i&/span& &span class=&o&&&&/span& &span class=&n&&n&/span& &span class=&p&&;&/span& &span class=&o&&++&/span& &span class=&n&&i&/span& &span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&n&&omega&/span& &span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&n&&Complex&/span& &span class=&p&&(&/span& &span class=&n&&cos&/span& &span class=&p&&(&/span& &span class=&mi&&2&/span& &span class=&o&&*&/span& &span class=&n&&PI&/span& &span class=&o&&/&/span& &span class=&n&&n&/span& &span class=&o&&*&/span& &span class=&n&&i&/span&&span class=&p&&),&/span& &span class=&n&&sin&/span& &span class=&p&&(&/span& &span class=&mi&&2&/span& &span class=&o&&*&/span& &span class=&n&&PI&/span& &span class=&o&&/&/span& &span class=&n&&n&/span& &span class=&o&&*&/span& &span class=&n&&i&/span& &span class=&p&&)&/span& &span class=&p&&)&/span& &span class=&p&&;&/span&
&span class=&n&&omegaInverse&/span& &span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&n&&omega&/span& &span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&p&&].&/span&&span class=&n&&conj&/span& &span class=&p&&(&/span& &span class=&p&&)&/span& &span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&p&&}&/span&
&span class=&kt&&void&/span& &span class=&nf&&transform&/span& &span class=&p&&(&/span& &span class=&n&&Complex&/span& &span class=&o&&*&/span&&span class=&n&&a&/span&&span class=&p&&,&/span& &span class=&k&&const&/span& &span class=&kt&&int&/span&&span class=&o&&&&/span& &span class=&n&&n&/span&&span class=&p&&,&/span& &span class=&k&&const&/span& &span class=&n&&Complex&/span&&span class=&o&&*&/span& &span class=&n&&omega&/span& &span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&k&&for&/span& &span class=&p&&(&/span& &span class=&kt&&int&/span& &span class=&n&&i&/span& &span class=&o&&=&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&n&&j&/span& &span class=&o&&=&/span& &span class=&mi&&0&/span& &span class=&p&&;&/span& &span class=&n&&i&/span& &span class=&o&&&&/span& &span class=&n&&n&/span& &span class=&p&&;&/span& &span class=&o&&++&/span& &span class=&n&&i&/span& &span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&k&&if&/span& &span class=&p&&(&/span& &span class=&n&&i&/span& &span class=&o&&&&/span& &span class=&n&&j&/span& &span class=&p&&)&/span&
&span class=&n&&std&/span& &span class=&o&&::&/span& &span class=&n&&swap&/span& &span class=&p&&(&/span& &span class=&n&&a&/span& &span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&p&&],&/span& &span class=&n&&a&/span& &span class=&p&&[&/span&&span class=&n&&j&/span&&span class=&p&&]&/span& &span class=&p&&)&/span& &span class=&p&&;&/span&
&span class=&k&&for&/span&&span class=&p&&(&/span& &span class=&kt&&int&/span& &span class=&n&&l&/span& &span class=&o&&=&/span& &span class=&n&&n&/span& &span class=&o&&&&&/span& &span class=&mi&&1&/span& &span class=&p&&;&/span& &span class=&p&&(&/span& &span class=&n&&j&/span& &span class=&o&&^=&/span& &span class=&n&&l&/span& &span class=&p&&)&/span& &span class=&o&&&&/span& &span class=&n&&l&/span& &span class=&p&&;&/span& &span class=&n&&l&/span& &span class=&o&&&&=&/span& &span class=&mi&&1&/span& &span class=&p&&)&/span& &span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&k&&for&/span& &span class=&p&&(&/span& &span class=&kt&&int&/span& &span class=&n&&l&/span& &span class=&o&&=&/span& &span class=&mi&&2&/span& &span class=&p&&;&/span& &span class=&n&&l&/span& &span class=&o&&&=&/span& &span class=&n&&n&/span& &span class=&p&&;&/span& &span class=&n&&l&/span& &span class=&o&&&&=&/span& &span class=&mi&&1&/span& &span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&kt&&int&/span& &span class=&n&&m&/span& &span class=&o&&=&/span& &span class=&n&&l&/span& &span class=&o&&/&/span& &span class=&mi&&2&/span&&span class=&p&&;&/span&
&span class=&k&&for&/span& &span class=&p&&(&/span& &span class=&n&&Complex&/span& &span class=&o&&*&/span&&span class=&n&&p&/span& &span class=&o&&=&/span& &span class=&n&&a&/span& &span class=&p&&;&/span& &span class=&n&&p&/span& &span class=&o&&!=&/span& &span class=&n&&a&/span& &span class=&o&&+&/span& &span class=&n&&n&/span& &span class=&p&&;&/span& &span class=&n&&p&/span& &span class=&o&&+=&/span& &span class=&n&&l&/span& &span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&k&&for&/span& &span class=&p&&(&/span& &span class=&kt&&int&/span& &span class=&n&&i&/span& &span class=&o&&=&/span& &span class=&mi&&0&/span& &span class=&p&&;&/span& &span class=&n&&i&/span& &span class=&o&&&&/span& &span class=&n&&m&/span& &span class=&p&&;&/span& &span class=&o&&++&/span& &span class=&n&&i&/span& &span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&n&&Complex&/span& &span class=&n&&t&/span& &span class=&o&&=&/span& &span class=&n&&omega&/span& &span class=&p&&[&/span&&span class=&n&&n&/span& &span class=&o&&/&/span& &span class=&n&&l&/span& &span class=&o&&*&/span& &span class=&n&&i&/span&&span class=&p&&]&/span& &span class=&o&&*&/span& &span class=&n&&p&/span& &span class=&p&&[&/span&&span class=&n&&m&/span& &span class=&o&&+&/span& &span class=&n&&i&/span&&span class=&p&&]&/span& &span class=&p&&;&/span&
&span class=&n&&p&/span& &span class=&p&&[&/span&&span class=&n&&m&/span& &span class=&o&&+&/span& &span class=&n&&i&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&n&&p&/span& &span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&p&&]&/span& &span class=&o&&-&/span& &span class=&n&&t&/span& &span class=&p&&;&/span&
&span class=&n&&p&/span& &span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&p&&]&/span& &span class=&o&&+=&/span& &span class=&n&&t&/span& &span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&p&&}&/span&
&span class=&p&&}&/span&
&span class=&p&&}&/span&
&span class=&kt&&void&/span& &span class=&nf&&dft&/span& &span class=&p&&(&/span& &span class=&n&&Complex&/span& &span class=&o&&*&/span&&span class=&n&&a&/span&&span class=&p&&,&/span& &span class=&k&&const&/span& &span class=&kt&&int&/span&&span class=&o&&&&/span& &span class=&n&&n&/span& &span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&n&&transform&/span& &span class=&p&&(&/span& &span class=&n&&a&/span&&span class=&p&&,&/span& &span class=&n&&n&/span&&span class=&p&&,&/span& &span class=&n&&omega&/span& &span class=&p&&)&/span& &span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&kt&&void&/span& &span class=&nf&&idft&/span& &span class=&p&&(&/span& &span class=&n&&Complex&/span& &span class=&o&&*&/span&&span class=&n&&a&/span&&span class=&p&&,&/span& &span class=&k&&const&/span& &span class=&kt&&int&/span&&span class=&o&&&&/span& &span class=&n&&n&/span& &span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&n&&transform&/span& &span class=&p&&(&/span& &span class=&n&&a&/span&&span class=&p&&,&/span& &span class=&n&&n&/span&&span class=&p&&,&/span& &span class=&n&&omegaInverse&/span& &span class=&p&&)&/span& &span class=&p&&;&/span&
&span class=&k&&for&/span& &span class=&p&&(&/span& &span class=&kt&&int&/span& &span class=&n&&i&/span& &span class=&o&&=&/span& &span class=&mi&&0&/span& &span class=&p&&;&/span& &span class=&n&&i&/span& &span class=&o&&&&/span& &span class=&n&&n&/span& &span class=&p&&;&/span& &span class=&o&&++&/span& &span class=&n&&i&/span& &span class=&p&&)&/span& &span class=&n&&a&/span& &span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&p&&]&/span& &span class=&o&&/=&/span& &span class=&n&&n&/span& &span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&p&&}&/span& &span class=&n&&fft&/span& &span class=&p&&;&/span&
&/code&&/pre&&/div&&p&&br&&/p&&p&注意代码中的 &img src=&https://www.zhihu.com/equation?tex=omega%5Bk%5D& alt=&omega[k]& eeimg=&1&& 为 &img src=&https://www.zhihu.com/equation?tex=%5Comega_%7Bn%7D%5E%7Bk%7D& alt=&\omega_{n}^{k}& eeimg=&1&& ,而在代码中需要得到的是 &img src=&https://www.zhihu.com/equation?tex=%5Comega_%7Bl%7D%5E%7Bk%7D& alt=&\omega_{l}^{k}& eeimg=&1&& 。&/p&&p&因为 &img src=&https://www.zhihu.com/equation?tex=n%3El& alt=&n&l& eeimg=&1&& 且 &img src=&https://www.zhihu.com/equation?tex=n%2Cl& alt=&n,l& eeimg=&1&& 都是 &img src=&https://www.zhihu.com/equation?tex=2& alt=&2& eeimg=&1&& 的次幂,所以 &img src=&https://www.zhihu.com/equation?tex=l+%5Cmid+n& alt=&l \mid n& eeimg=&1&& ,且 &img src=&https://www.zhihu.com/equation?tex=2%5Cmid%5Cfrac%7Bn%7D%7Bl%7D& alt=&2\mid\frac{n}{l}& eeimg=&1&& 。&/p&&p&所以 &img src=&https://www.zhihu.com/equation?tex=%5Comega_%7Bl%7D%5E%7Bk%7D%3D%5Comega_%7Bn%7D%5E%7B%5Cfrac%7Bn%7D%7Bl%7D%5Ccdot+k%7D& alt=&\omega_{l}^{k}=\omega_{n}^{\frac{n}{l}\cdot k}& eeimg=&1&& (可以由折半引理证明)。&/p&&p&其余配图 &img src=&https://www.zhihu.com/equation?tex=%2B& alt=&+& eeimg=&1&& 代码都很好理解。&/p&&p&&b&至此快速傅里叶变换就结束了。&/b&&/p&&p&&br&&/p&&h2&&b&0x07 写在后面&/b&&/h2&&p&感谢 &a class=&member_mention& href=&https://www.zhihu.com/people/cdabefee8bb3& data-hash=&cdabefee8bb3& data-hovercard=&p$b$cdabefee8bb3&&@Menci&/a& 的blog让我学会了FFT。&/p&&p&感谢 &a class=&member_mention& href=&https://www.zhihu.com/people/8ebbebe917c4ea27b9e1b0& data-hash=&8ebbebe917c4ea27b9e1b0& data-hovercard=&p$b$8ebbebe917c4ea27b9e1b0&&@Doggu&/a& 的讲解让我再次理解了FFT。&/p&&p&参考资料&/p&&p&&a href=&https://link.zhihu.com/?target=https%3A//oi.men.ci/fft-notes/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Menci的FFT学习笔记&/a&&/p&&p&&a href=&https://link.zhihu.com/?target=https%3A//zh.wikipedia.org/wiki/%25E5%25A4%258D%25E6%_%28%25E6%%25E5%25AD%25A6%29& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&复数-Wikipedia&/a&&/p&&p&&a href=&https://link.zhihu.com/?target=https%3A//zh.wikipedia.org/wiki/%25E5%25A4%258D%25E5%25B9%25B3%25E9%259D%25A2& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&复平面-Wikipedia&/a&&/p&&p&&a href=&https://link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/Complex_number& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Complex Number-Wikipedia&/a&&/p&
0x00 写在前面为了让更多人能够看到这个教程,希望大家收藏之前,也要点赞哦!!!蟹蟹大家的认可和鼓励。
傅里叶变换 快速傅里叶变换(Fast Fourier Transform,FFT)是一种可在 O(nlogn) 时间内完成的离散傅里叶变换(Discrete Fourier trans…
因为不是很关心渲染,所以我只说模拟之于计算机图形学:&br&1.如果你是想写出属于自己的高质量的 液体/烟雾/爆炸 解算器, &br&Fluid simulation for computer graphics, by Robert Bridson(Naiad的作者), 这本书将引导你从0开始写出自己的高质量的解算器, 建议你结合chris batty或者我开源出来的代码为参考.&br&&br&2. 此方向比较重要的siggraph 论文有: stable fluids(stam99),
visual simulation of smoke(ronFedkiw), practical animation of liquids(foster), Animating Suspended Particle Explosions(feldman), animating sand as fluids(Y. Zhu), A Fast Variational Framework for Accurate Solid-Fluid Coupling(Chris Batty). A parallel multigrid Poisson solver for fluids simulation on large grids(McAdams) A material point method for snow simulation(UCLA)&br&&br&3.这些仅仅是论文, 能支撑你吃透这些论文并且创新的关键是对于数学工具的学习, 建议你把这些书尽可能地看以及做书后习题:&br&Numerical Mathematics &br&a first course in numerical methods&br&Methods of computational fluid dynamics&br&A multigrid tutorial&br&vortex methods: theory and practice.&br&mathematical theory of finite element method&br&turbulent flow&br&由此, 你需要对计算流体(准确地说不是流体力学,而是如何用计算机程序去解算流体的算法)里的常见概念以及问题都比较熟悉, 比如:&br&数值误差都有哪些, 分别都是如何造成的?&br&线性方程迭代算法的敛散性&br&Krylov subspace solver的推导,特性以及应用场景.&br&CFL condition如何得到?(冯诺依曼分

我要回帖

更多关于 厦门oneday怎么订房 的文章

 

随机推荐