FFT 专题讲解

FFT是什么?

FFT是快速傅里叶变换(fast Fourier transform)的简称。在ACM领域主要是用来快速求解多项式乘法的算法,
在信号领域也有很大用途


基础知识

  1. 卷积
    举个例子,给你两个向量 \(a (a_0, a_1, a_2), b(b_0, b_1, b_2)\)
    a和b的卷积就是$ ( a_0b_0, a_1b_0+a_0b_1, a_2b_0+a_1b_1+a_0b_2, a_1b_2+a_2b_1, a_2b_2 ) $
    即可以看作两个多项式\(A(x)=a_0+a_1x^1+a_2x^2和B(x)=b_0+b_1x+b_2x^2\)相乘。
    所以卷积就可看做多项式乘法。那些形如\(c_k = \Sigma_{i=0}^{k}a_ib_{k-i}\)卷积的就可以类比成多项式乘法 ,就可通过fft快速求解。

  2. 多项式
    • 多项式有两种表达形式
    • 一种是系数表达形如\(A(x) = \Sigma_{i=0}^{n-1} a_ix^i\)
    • 另一种是点值表达, 形如\((x_1, y_1), (x_2, y_2), (x_3, y_3)...(x_m, y_m)\), 且m>=n
    • 多项式的点值表示和插值表示可以互推
  3. \(w_n=e^{2\pi i/n}\)
    • \(w_n^{n/2+k}=-w_n^k\)
    • \(w_n^{2k}=w_{n/2}^k\)
    • $ \Sigma_{j=0}^{n-1}w_n^{jk}= (k%n==0)?n:0$

傅里叶变换的原理

1240

在傅里叶变换里面系数表达和点值表达如何互推?

一个暴力点的方法
系数表达->点值表达 \(y_k = \Sigma_{i=0}^{n-1}a_iw_n^{ki}\)

点值表达->系数表达 \(a_k = 1/n*\Sigma_{i=0}^{n-1}y_iw_n^{-ki}\)
证明看黑板
所以不论是系数表达推点值表达还是点值表达推系数表达方法都一样

如何快速的求出上面的式子呢
假设 $A(x)=a_0+a_1x+a_2x^2+...+a_{n-1}x^{n-1} $
\(A(x)=(a_0+a_2x^2+a_4x^4+...+a_{n-2}x^{n-2})+(a_1x+a_3x^3+..+a_{n-1}x^{n-1})\)
\(A_0(x)=a_0+a_2x+a_4x^2+...+a_{n-2}x^{n/2-1}, A_1(x)=a_1+a_3x+a_5x+...+a_{n-1}x^{n/2-1}\)
\(A(x) = A_0(x^2)+xA_1(x^2)\)
那么就可以用\(A_0(w_{n/2}^0), A_0(w_{n/2}^1) ... A_0(w_{n/2}^{n/2-1})\)\(A_1(w_{n/2}^0), A_1(w_{n/2}^1) ... A_1(w_{n/2}^{n/2-1}\)
得出\(A(w_{n}^0), A(w_{n}^1) ... A(w_{n}^{n-1})\)

\(所以可以采用递归分治的办法求解FFT\)

分治图
1240

void ntt(ll* a, int n, int t) {rep(i, 0, n) {int rv = rev(i,n);if(i<rv) swap(a[i], a[rv]);}ll g=1;if(t==1) g=3;else g=inv[3];for(int m=2; m<n+1; m<<=1) {ll wm= mypow(g, (MOD-1)/m);int mid=m>>1;for(ll *p=a; p<a+n; p+=m) {ll w=1;rep(i, 0, mid) {ll t=w*(p[mid+i]);p[mid+i] = p[i]-t;p[i] = p[i]+t;w = w*wm%MOD;p[i]=%MOD, p[mid+i]%=MOD;}}}if(t==-1) {rep(i, 0, tn)a[i]=a[i]*inv[n]%MOD;}
}
void fft(ll *a, ll* b, int n) {int tn=MAXN;while(tn/4>=n) tn>>=1;ntt(a, tn, 1);ntt(b, tn, 1);rep(i, 0, tn)a[i] = a[i]*b[i]%MOD;ntt(a, tn, -1);
}

NTT \(w_n=g^{(P-1)/n}\%P\)

  • 一些更高级的操作或例题
    https://wenku.baidu.com/view/20c234cf581b6bd97f19eaea.html
    http://blog.csdn.net/samjia2000/article/details/65661468
    https://www.cnblogs.com/candy99/p/6738010.html

转载于:https://www.cnblogs.com/Merodach/p/7395604.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400131.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PureMvc学习笔记

2019独角兽企业重金招聘Python工程师标准>>> PureMvc学习笔记&#xff1a; Mediator ->对应View层&#xff0c;内部绑定View对象&#xff0c;由 Mediator 对象来操作具体的视图组件。&#xff08;它的作用还包括&#xff1a;添加事件监听器&#xff0c;发送或接收…

【电路补习笔记】6、MOS管的参数与选型

目录符号寄生二极管&#xff08;体二极管&#xff09;的方向连接方法作用导通问题NMOSPMOS开关作用隔离作用引脚分辨常见型号NMOS的参数VDSS最大漏-源电压VGS最大栅源电压ID-连续漏电流VGS&#xff08;th&#xff09;RDS&#xff08;on&#xff09;导通电阻Ciss&#xff1a;输入…

HTML中 CSS去除li前面的小黑点

ul.tpl-left-nav-menu {list-style: none; } https://blog.csdn.net/qq_33833327/article/details/78652039

servlet核心API的UML图

转载于:https://www.cnblogs.com/suncoolcat/p/3339613.html

8.19noip模拟题

2017 8.19 NOIP模拟赛 by coolyangzc 共3道题目&#xff0c;时间3小时 题目名 高级打字机 不等数列 经营与开发 源文件 type.cpp/c/pas num.cpp/c/pas exploit.cpp/c/pas 输入文件 type.in num.in exploit.in 输出文件 type.out num.out exploit.out 时间限制 …

【电路补习笔记】7、磁珠的工作原理、磁珠的分类、磁珠的模型、磁珠的参数、磁珠与电感的区别、磁珠的应用、磁珠的误区

目录简介铁耗磁滞损耗磁珠归类应用对比参数用途电源滤波低通滤波器的设计符号关于单点接地老师的主页&#xff1a;唐老师讲电赛 视频地址&#xff1a;磁珠的工作原理&#xff0c;磁珠的分类&#xff0c;磁珠的模型&#xff0c;磁珠的参数磁珠与电感的区别&#xff0c;磁珠的应用…

几个常用的正则表达式

几个常用的正则表达式(下面是在javascript里面的使用方式): 1. 正则表达式的中文表示 var reg_zh/^[\u4E00-\u9FA5\uF900-\uFA2D]*$/; 2. 正则表达式的英文表示(可以拆分成大小写) var reg_en /^[a-zA-Z]$/; 3. 正则表达式判断特殊字符(可以增减字符) var reg_spechars /^(?…

wordpress教程百科

https://www.xuewangzhan.net/jz/wpbbs/

顺序容器之vector

最近因为需要&#xff0c;在看C primer,哇&#xff0c;感觉这本书真不错&#xff0c;讲的细而且到位&#xff0c;而且大量的练习题&#xff0c;不愧为C学习的经典书籍。今天看了顺序容器方面的内容&#xff0c;现在汇报一下&#xff1a; 一、什么是vector vector是C标准模板库&…

利用python数据分析panda学习笔记之Series

1 Series a&#xff1a;类似一维数组的对象&#xff0c;每一个数据与之相关的数据标签组成 b:生成的左边为索引&#xff0c;不指定则默认从0开始。 1 from pandas import Series,DataFrame 2 import pandas as pd 3 #series 一组数据与相关得数据标签组成 4 objSeries([4,7,-5…

12864 OLED屏显示日历

目录calendar.c测试程序效果普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 stdint.h见【51单片机快速入门指南】1&#xff1a;基础知识和工程创建 I2C版OLED驱动程序见【51单片机快速入门指南】4.2&#xff1a; SSD1306…

【笔记】iOS开发基础笔记二

1.block 2.didReceiveMemoryWarning 使用 3.HTTP&#xff0c;TCP&#xff0c;UDP 答&#xff1a;HTTP是应用层协议&#xff0c;定义的是传输数据的内容的规范HTTP协议中的数据是利用TCP协议传输的&#xff0c;所以支持HTTP也就一定支持TCP HTTP支持的是www服务 而TCP/IP是协议…

心得体会2-7

通过例题2-7&#xff0c;i1还是il的一次次反复错误导致难以运行&#xff0c;我懂得了输完程序并不只是盯着程序看&#xff0c;还应该看看例题中提示&#xff0c;真正明白表达式是什么意思。转载于:https://www.cnblogs.com/huangsilinlana/p/3349449.html

【动态规划】POJ-2229

一、题目 Description Farmer John commanded his cows to search for different sets of numbers that sum to a given number. The cows use only numbers that are an integer power of 2. Here are the possible sets of numbers that sum to 7: 1) 1111111 2) 111112 3) 1…

【联盛德W806上手笔记】二、GPIO

目录GPIO 控制器库函数函数参数宏极限翻转速度寄存器操作库函数操作测试main.cwm_it.cWindows 10 20H2 HLK-W806-V1.0-KIT WM_SDK_W806_v0.6.0 GPIO 控制器 摘自《W806 芯片设计指导书 V1.0》 可配置的 GPIO、软件控制的输入输出、硬件控制的输入输出、可配置中断方式。…

php 显示变量类型

echo "<br/> type ".gettype($my_data);

Java知多少(105)套接字(Socket)

网络应用模式主要有&#xff1a; 主机/终端模式&#xff1a;集中计算&#xff0c;集中管理&#xff1b;客户机/服务器&#xff08;Client/Server,简称C/S&#xff09;模式&#xff1a;分布计算&#xff0c;分布管理&#xff1b;浏览器/服务器模式&#xff1a;利用Internet跨平台…

fastq-dump 报错 解决方案

命令行&#xff1a; ~/sratoolkit/sratoolkit.2.3.2/bin/fastq-dump --split-spot --gzip xxxx.sra 报错信息: fastq-dump.2.3.2 err: name not found while resolving tree within virtual file system module - failed to open xxxx.sra 解决方法&#xff1a; 找不到xxx.sra&…

css格式化排版

body{ font-family:"宋体";} body{font-family:"Microsoft Yahei"&#xff0c;“微软雅黑”;} 2.文字排版--字号、颜色&#xff1a; body{ font-size:12px; color:#666;} 3.文字排版--粗体&#xff1a; p span{ font-weight:bold; } 4.文字排版--斜体&a…

【联盛德W806上手笔记】三、MCU系统与时钟结构

目录总线结构AHB-1 总线AHB-2 总线时钟与复位主要特性时钟结构功能描述时钟门控时钟自适应关断功能复位时钟分频寄存器描述寄存器列表软件时钟门控使能寄存器软件时钟掩码寄存器软件复位控制寄存器时钟分频配置寄存器调试控制寄存器I2S 时钟控制寄存器复位状态寄存器调试功能控…