我居然开始听不懂听不懂听不懂了,
就连博客也看不懂看不懂看不懂了。
今天讲了FFT,DFT,都是些什么啊~~~
看不懂也要看啊,毕竟比别人少放一天假,要学点东西撒。
看了这么久,感觉能写点东西了。
快速傅里叶变换(FFT),是傅里叶变换(DFT)的加强版。
时间复杂度为O(nlogn),接下来我们考虑用点值还原出多项式。
上述求点值的过程相当于左乘了一个矩阵,这个矩阵的第j行第k列的值为。
我们发现这个矩阵的逆矩阵是 ,那么我们可以用同样的方法还原出多项式。
缺点:在多项式系数较大的时候,快速傅里叶变换有很大精度误差。通常题目会对大质数取模,如果这个大质数(一般是998244353)有一个2^m次单位根g,那么我们可以用g代替
然后,再%一波:%一%就打开了下面的链接哦。
(https://www.cnblogs.com/Lyush/articles/3219196.html) ve删掉了一些蒟蒻看不懂的东西。有限长离散信号x(n),n=0,1,…,N-1的DFT定义为:
这段话ve不太明白,但是还是留着吧。
可以看出,DFT需要计算大约N2次乘法和N2次加法。当N较大时,这个计算量是很大的。利用WN的对称性和周期性,将N点DFT分解为两个N/2点的 DFT,这样两个N/2点DFT总的计算量只是原来的一半,即(N/2)2+(N/2)2=N2/2,这样可以继续分解下去,将N/2再分解为N/4点 DFT等。对于N=2m 点的DFT都可以分解为2点的DFT,这样其计算量可以减少为(N/2)log2N次乘法和Nlog2N次加法。图1为FFT与DFT-所需运算量与计算点数的关系曲线。由图可以明显看出FFT算法的优越性。
将x(n)分解为偶数与奇数的两个序列之和,即
x1(n)和x2(n)的长度都是N/2,x1(n)是偶数序列,x2(n)是奇数序列,则
其中X1(k)和X2(k)分别为x1(n)和x2(n)的N/2点DFT。由于X1(k)和X2(k)均以N/2为周期,且WN k+N/2=-WN k,所以X(k)又可表示为:
上式的运算可以用图2表示,根据其形状称之为蝶形运算。依此类推,经过m-1次分解,最后将N点DFT分解为N/2个两点DFT。图3为8点FFT的分解流程。
FFT算法的原理是通过许多小的更加容易进行的变换去实现大规模的变换,降低了运算要求,提高了与运算速度。FFT不是DFT的近似运算,它们完全是等效的。
关于FFT精度的说明:
因为这个变换采用了浮点运算,因此需要足够的精度,以使在出现舍入误差时,结果中的每个组成部分的准确整数值仍是可辨认的。为了FFT的舍入误差,应该允许增加几倍log2(log2N)位的二进制。以256为基数、长度为N字节的数可以产生大到(256)2N阶的卷积分量,所以为了正确存储,需要16+log2N位精度,若数i是浮点尾数的二进制位数,则有条件:
如果i=24,对于任意感兴趣(N>256)的N值,单精度是不合适的;如果i=53,也就是采用双精度,则允许N大于106,相当于几百万十进制位。所以,用FFT作大数乘法时,向量数组选用双精度类型。
小小的闲话两句,给自己这位刚学信息的小蒟蒻,也是给各位刚起步的OIers.
到今天,集训就全部结束了(明天还有场考试,我提前走,可以忽略,好吧我还是会把考试题补起来的)
学了很多很多东西,在这大半个月里,我们赶上了高一学长们一年的进度。
但是很虚~~
见识算是打开了吧,题也没来得及刷,太虚了~~
在集训的这些天里,就停掉了所有的文化课,从早上7点半到晚上10点半, 中午要求回去睡觉,吃饭,其余的时间,就是整天待在机房了。
我知道这将是我以后的常态,挺好的呀~~这个暑假,我都不会变黑(因为机房里是不会受到来自太阳的辐射的,只会受到来自电脑的~~)
遇到了很多困难吧(还好ve是跟数学竞赛煎熬了大半年的人,表示信息也没有比数学简单多少qwq_)就是很多坎,没有那么容易,集训难度梯度很大,对ve来说,都需要慢慢学习。
我觉得自己还是有很多地方做得不够好吧,有点听不懂就开始有些小情绪。可能是习惯了什么都懂的感觉。有几个月没接触数学竞赛了,在再次接触到那些奇奇怪怪的符号和公式时,我也没有比那些高中数学没接触的人淡定,还是会很崩,心态爆炸。
但是不管怎么闹腾,在此之后,都要拼尽全力去完成,那些不喜欢的公式定理,不喜欢的数学符号,你必须要接触,你希望成为的那种人很厉害,他一定不会被这点小小的数学公式打倒,更不会被一次考试打倒,不会被别人打倒,更不会被自己打倒。你会有很多不明白的地方,你可能像蒟蒻我一样,分分钟崩溃,但是,你要往前走。
不管有多难,可你自己的路还要走完。
ps:我会逐渐填完之前的坑的,虽然我觉得可能填不完。。。