FFT的应用

Posted guoshaoyang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FFT的应用相关的知识,希望对你有一定的参考价值。

FFT的应用

概述

FFT的模板很简单,大家都会背,于是出题的空间就在于建模了。FFT的题目难在建模,往往需要将问题抽象出来,经过一系列转化后得到乘积式的和,再赋予式子各个项的系数一定的意义即可。

基本形式

对于类似\(\sum_i+j=N+ka_ib_j\)的式子,可以直接通过FFT计算。
其中N是定值,表示元素个数;k是变量,是题目中的系数,a和b是间接已知数组,当a与b的系数和为定值时,可将一个翻转,否则直接计算。

例题:P3723?[AH2017/HNOI2017]礼物

直接计算卷积

一些问题经过简单的推导即可推出可以用计算卷积来解决,这类问题多形如对所有不大于\(n\)\(k\)求出某个东西,其中\(k\)的答案为求某个卷积后结果数组的第\(k\)项。

例题:CF993E

给出一个大小为\(n\)的数组\(a\)和一个数\(x\),对于\(0\)\(n\)之间的所有\(k\),求有多少个\(a\)的区间中恰有\(k\)个数小于\(x\)
\(1\leq n\leq 2 \times 10^5, -10^9\leq x,ai \leq 10^9\)

多项式运算

多项式乘法可以用来表示卷积,而借助多项式的性质,可以分析并解决类型更为广泛的问题。其中,最典型的例子是利用生成函数解决组合计数问题,这往往可以简化推导过程,有时还可以借助专用算法优化复杂度。

字符串匹配

代通配符的字符串匹配

\(s,t\)为字符串,其中\(t\)中某些字符是通配符,可以匹配任意字符,求\(s\)\(t\)中的所有匹配的位置。将通配符设为\(0\),其余字符设为非\(0\)的数,则\(s\)\(k\)处匹配当且仅当
\[\sum_0\leq i < |s|t_i+k(s_i-t_i+k)^2=0\]
结合计算卷积,很容易算出左式,即可完成匹配

模板:P4173 残缺的字符串

要求匹配两个字符串A,B,两者都有通配符

\[\sum_0\leq i < |s|t_i+ks_i(s_i-t_i+k)^2=0\]

给出字符串\(s,t\)和非负整数\(d\),求有多少个\(k\),满足对于所有\(s\)的下标\(i\),都存在距离\(k+i\) 不大于\(d\)\(j\),使得\(s_i = t_j\)\(1\leq |s|,|t|, k\leq 2\times 10^5\),字符集大小为\(4\)

以上是关于FFT的应用的主要内容,如果未能解决你的问题,请参考以下文章

分别对立体声信号的两个通道应用 FFT?

初探FFT在数字图像处理中的应用(fft2函数的用法)

在 fft 中应用窗口函数的正确方法

如何将 FFT 应用于录音以获取频率?

对 pcm 数据应用 FFT 并转换为频谱图

在应用 FFT 之前从 wav 文件中读取数据