FFT中的一个常见小问题

FFT中的一个常见小问题

这里不细说FFT的内容,详细内容看这些就足以了解大概了

小学生都能看懂的FFT!!!

FFT详解

补充——FFT中的二进制翻转问题

主要是对学习过程中一个容易困扰的小问题进行解释,以便于理解

  • 用FFT将多项式的系数转换为点值时,原系数数组a最后存的是不同的点值,而不是只有第一个是点值

    这一点最开始困扰了我很久

    设 $A(x)=a_0+a_1x+a_2x^2+...+a_{n?1}x^{n?1}$

    则可将其移项 $A(x)=(a_0+a_2x^2+...+a_{n?2}x^{n?2})+(a_1x+a_{3}x^3+...+a_{n?1}x^{n?1})$

    a的下标为偶数的放在一起 $A_1(x)=a_0+a_2x+...+a_{n?2}xn^{2?1}$

    a的下标为奇数的放在一起 $A_2(x)=a_1+a_3x+...+a_{n?1}xn^{2?1}$

    则$A(x)=A_1(x^2)+xA_2(x^2)$

    注意此处为$x^2$所以有

    $A(-x)=A_1(x^2)-xA_2(x^2)$

    由于单位根的特殊性质,有

    性质一 $ω_n^{k+\frac{n}{2}}=-ω_n^k$

    性质二 $ω_n^k=ω_{2n}^{2k}$

    所以才有了代码中的那两行

    cpp for (int i=0;i<=mid-1;++i){ buf[i]=a[i]+w*a[i+mid]; buf[i+mid]=a[i]-w*a[i+mid]; w=w*wn; }

    也就是说,我们可以由一个答案进而算出另外一个答案,这里可以理解为递推

    所以当我们的递归递到最下面一层后往上走时每次都是将目前答案个数扩大两倍,而且这些答案是由不同的x算出来的,而且由于性质一,我们在计算过程中所用到的不同的$ω^{x*k}$是没有问题的

原文地址:https://www.cnblogs.com/Morning-Glory/p/10283697.html

时间: 2024-11-05 21:00:16

FFT中的一个常见小问题的相关文章

解决latex中遇到一个常见错误:&quot;Improper alphabetic constant.&quot;

1.问题: 本人是在WIN7下用texlive 2016,编辑器用的是WinEdt 10.1 ,运行如下代码: 1 \documentclass{ctexbook} 2 \begin{document} 3 \title{中文 \LaTeX{} 测试} 4 \author{姓名} 5 \maketitle 6 \tableofcontents 7 \chapter{测试} 8 中文测试. 9 \chapter{再测试} 10 中文测试. 11 \end{document} 返回如下错误: ! I

9.28工作中的一些常见小坑---样式类

一.自定义select样式: select { /*Chrome和Firefox里面的边框是不一样的,所以复写了一下*/ border: solid 1px #000; /*很关键:将默认的select选择框样式清除*/ appearance:none; -moz-appearance:none; -webkit-appearance:none; /*在选择框的最右侧中间显示小箭头图片*/ background: url("http://ourjs.github.io/static/2015/a

JavaScript中易犯的小错误-------常见错误五:低效的DOM操作

JavaScript中易犯的小错误-------常见错误五:低效的DOM操作js中的DOM基本操作非常简单,但是如何能有效地进行这些操作一直是一个难题.这其中最典型的问题便是批量增加DOM元素.增加一个DOM元素是一步花费很大的操作.而批量增加对系统的花销更是不菲.一个比较好的批量增加的办法便是使用 document fragments :var div = document.getElementsByTagName("my_div");var fragment = document.

JavaScript中易犯的小错误-------常见错误三:内存泄露

国庆放假,今天开始继续!!!!!!!!!!! JavaScript中易犯的小错误-------常见错误三:内存泄露 内存泄露在js变成中几乎是一个无法避免的问题.如果不是特别细心的话,在最后的检查过程中,肯定会出现各种内存泄露问题.下面我们就来举例说明一下:var theThing = null;var replaceThing = function () {     var priorThing = theThing;     var unused = function () {       

JavaScript中易犯的小错误-------常见错误四:比较运算符

JavaScript中易犯的小错误-------常见错误四:比较运算符JavaScript中一个比较便捷的地方,便是它可以给每一个在比较运算的结果变量强行转化成布尔类型.但是从另一方面来考虑,有时候它也会为我们带来很多不便,下面的这些例子便是一些一直困扰很多程序员的代码实例:console.log(false == '0');console.log(null == undefined);console.log(" \t\r\n" == 0);console.log('' == 0);

JavaScript中易犯的小错误-------常见错误七:原型继承问题

JavaScript中易犯的小错误-------常见错误七:原型继承问题 很大一部分的js开发者都不能完全掌握原型的继承问题.下面具一个例子来说明:BaseObject = function(name) {if(typeof name !== "undefined"){ this.name = name; }else{ this.name = 'default' } };这段代码看起来很简单.如果你有name值,则使用它.如果没有,则使用 ‘default’:var firstObj

Linux下安装MyEclipse和Tomcat服务器详解,以及我安装过程中所出现的问题以及解决办法,并实现一个web小程序

1.首先,先要去MyEclipse和Tomcat的官网去下载Linux版的压缩文件,而MyEclipse的中文官网是需要登录并有可能要付钱,大家可以去网上下载,还有就是Tomcat的linux版,这个直接上官网就可以下载了,下载后我还是通通把它们放在我E盘下的as目录底下,如果大家还没配置好jdk,即Java环境的话,可看我这篇文章:http://blog.csdn.net/u012561176/article/details/45119047 这里我就直接进行操作了! 我E盘下的as文件夹

Eclipse中的一个小插件easyExplorer--用于打开文件所在目录

最近格式化了硬盘,里面的诸多有价值的插件都没了,开发时需要打开java文件所在的目录,每次都很麻烦,实在无法忍受,就又重新下载了一个小插件,用以很方便的打开文件所在目录: easyExplorer 仅有7kb 一:官方下载地址: http://sourceforge.net/projects/easystruts/ 由于天朝网络问题,等个大概十来秒的时间出现下图: 二:配置方式: 直接将下载后的文件:org.sf.easyexplore_1.0.4.jar复制到eclipse下的plugins下

JavaScript中易犯的小错误-------常见错误二:传统编程语言的生命周期误区

JavaScript中易犯的小错误-------常见错误二:传统编程语言的生命周期误区另一种易犯的错误,便是带着其他编程语言的思维,认为在JS中,也存在生命周期这么一说.请看下面的代码:for (var i = 0; i < 10; i++) { /* ... */ } console.log(i);如果你认为在运行console.log() 时肯定会报出 undefined 错误,那么你就大错特错了.我会告诉你其实它会返回 10吗.当然,在许多其他语言当中,遇到这样的代码,肯定会报错.因为i明