快速傅里叶变换应用(FFT Applications)
1. 3-SUM
1.1 问题描述
Given three sets \(X\), \(Y\), and $Z $ of \(n\) integers each, determine whether there is a triple \(i \in X, j \in Y, k \in Z\) such that \(i + j = k\).
给定三个包含\(n\)个整数的集合, 每个整数的值都在\(0\)到\(m\)之间, 判断是否有一个三元组\((i, j, k)\)满足\(i \in X, j \in Y, k \in Z\)并且\(i + j = k\).
1.2 解答
算法如下:
- 构造多项式:
\]
\]
其中\(a_i=1\) 当且仅当\(i \in X\)否则\(a_i=0\), \(b_j=1\) 当且仅当\(j \in Y\)否则\(b_j=0\).
- 计算\(C(x)=A(x)\times B(x)\). (利用FFT)
- 多项式\(C(x)\)系数\(c_k\)表示集合\(\set{(i, j)|i\in X,j \in Y, i+j=k}\)的大小, 即选择一个整数\(i \in X\)和一个整数\(j\in Y\), 使得他们的和为\(k\)的方法数.
- 对于每一个\(k\in Z\), 判断\(c_k\)是否大于\(0\), 如果存在一个\(k\)满足条件, 说明可以找到一个三元组\((i, j, k)\)满足\(i \in X, j \in Y, k \in Z\)并且\(i + j = k\).
时间复杂度: FFT需要\(O(m\log m)\), 遍历\(Z\)需要\(O(n)\), 总共\(O(m\log m+n)\).
2. 等距下标
2.1 问题描述
长度为\(n\)的二进制串\(A\)的一组等距下标\((i,j,k)\)满足如下条件:
- \(0\leq i <j<k\leq n-1\),
- \(A[i]=A[j]=A[k]=1\),
- \(k-j=j-i\).
(a) 设计⼀个\(O(n\log n)\)的算法,计算\(A\)中是否存在等距下标.
(b) 设计⼀个\(O(n\log n)\)的算法,计算\(A\)中有多少组等距下标.
2.2 解答
(a) 算法如下:
- 构造多项式:
\]
其中系数\(a[t]=A[t]\).
- 计算\(B(x)=A(x)\times A(x)\). (利用FFT)
- 多项式\(B(x)\)的系数\(b_l\)表示集合\(\set{(p, q)|p,q\in [0,n-1], A[p]=A[q]=1, p+q=l}\)的大小, 即有多少组下标\(p\)和下标\(q\), 满足\(A[p]=A[q]=1\)和\(p+q=l\).
- 判断是否存在\(b_l=2r+1\), 其中\(b_l\)为多项式\(B(x)\)的系数, \(r=1,2,3,\dots\), 如果存在说明存在等距下标.
等距下标\((i, j, k)\)满足\(i+k=2j\), 多项式\(B(x)\)中, \(b_lx{^l}\)表示和为\(l\)且对应位置为1的下标有\(b_l\)组. 所以当\(b_l\)为大于等于3的奇数时, 一定存在等距下标.
*为什么要求为奇数? 为了保证有\(i, j, k\)中的\(j\), 只有和为\(l\)的下标有奇数组,才能保证\(b_l\)组中一定有一组下标为\((j, j)\), 此时才能保证一定有\(i+k=2j\), 即存在等距下标.
(b)
在(a)的基础上, 只需遍历\(B(x)\)的系数, 如果\(b_l\)为大于等于3的奇数, 则最终结果需要加\(\lfloor \frac{b_l}{2} \rfloor\).
未完待续...
快速傅里叶变换应用(FFT Applications)的更多相关文章
- 【知识总结】快速傅里叶变换(FFT)
这可能是我第五次学FFT了--菜哭qwq 先给出一些个人认为非常优秀的参考资料: 一小时学会快速傅里叶变换(Fast Fourier Transform) - 知乎 小学生都能看懂的FFT!!! - ...
- 快速傅里叶变换(FFT)略解
前言 如果我们能用一种时间上比 \(O(n^2)\) 更优秀的方法来计算大整数(函数)的乘法,那就好了.快速傅里叶变换(FFT) 可以帮我们在 \(O(n\log n)\) 的时间内解决问题. 函数乘 ...
- OI中的快速傅里叶变换(FFT)
快速傅里叶变换(FFT) ---- LLpp ...
- 【数学】快速傅里叶变换(FFT)
快速傅里叶变换(FFT) FFT 是之前学的,现在过了比较久的时间,终于打算在回顾的时候系统地整理一篇笔记,有写错的部分请指出来啊 qwq. 卷积 卷积.旋积或褶积(英语:Convolution)是通 ...
- 算法学习笔记(17): 快速傅里叶变换(FFT)
快速傅里叶变换(FFT) 有趣啊,都已经到NOI的难度了,救命 首先,我们先讲述一下前置知识.已经明白的读者请移步后文 虚数 定义:\(z = a + bi\),其中 \(a, b \in R\ \ ...
- 快速傅里叶变换(FFT)算法【详解】
快速傅里叶变换(Fast Fourier Transform)是信号处理与数据分析领域里最重要的算法之一.我打开一本老旧的算法书,欣赏了JW Cooley 和 John Tukey 在1965年的文章 ...
- 快速傅里叶变换(FFT)学习笔记(未完待续)
目录 参考资料 FFT 吹水 例题 普通做法 更高大尚的做法 定义与一部分性质 系数表达式 点值表达式 点值相乘??? 卷积 复数 单位根 DFT IDFT 蝴蝶迭代优化 单位根求法 实现.细节与小优 ...
- 快速傅里叶变换(FFT)随笔
终于学会了FFT,水一篇随笔记录一下 前置知识网上一大堆,这里就不多赘述了,直接切入正题 01 介绍FFT 这里仅指出FFT在竞赛中的一般应用,即优化多项式乘法 一般情况下,计算两个规模为$n$的多项 ...
- 「算法笔记」快速傅里叶变换(FFT)
一.引入 首先,定义多项式的形式为 \(f(x)=\sum_{i=0}^n a_ix^i\),其中 \(a_i\) 为系数,\(n\) 为次数,这种表示方法称为"系数表示法",一个 ...
- 快速傅里叶变换(FFT)
一.FFT的意义 DFT虽然实现了FT的计算机计算,但是计算量大,不适合实时的数字信号处理.FFT算法的出现,使DFT的计算效率更高,速度更快. 二.FFT与DFT的关系 从FT到DFT经过了数字角频 ...
随机推荐
- Linux系统安装&VMware安装一
本次安装使用的VMware版本是15.5pro,镜像文件是centos7_x86 如果你还没有VMware和镜像文件,这里给你提供: https://my.vmware.com/cn/web/vmwa ...
- 解决ESP8266反复启动问题
ESP8266刷不同固件后,有时会出现反复启动的问题,可能是FLASH里有未擦除干净的区域. 使用乐鑫 Flash 下载工具擦除 选好串口后点击erase擦除,即可正常使用
- 2021年前端面试题-HTML篇
1.<img>的title和alt有什么区别? 1.alt:图片加载失败时,显示在网页的替代文字 2.title:鼠标放在上面时显示的文字 3.alt是必要属性,title非必要 2.WE ...
- leetcode之——二分法模板
class Solution: def search(self, nums: List[int], target: int) -> int: n=len(nums) left,right=0,n ...
- 【逆向】x64dbg设置条件断点 比较内存字符串是否相等
前言 在OD中可以设置条件断点,通过表达式对字符串数据进行比较,比如在CreateFile打开某个特定文件的时候让调试器中断.但是在x32dbg.x64dbg中因为表达式只支持整数,不支持字符串和其它 ...
- int 和vachar后面的数字代表的含义
在创建数据表的时候,我们经常会给每一个字段设置一个长度,例如:int(5).varchar(10) 等等,但是他们代表的意思是什么呢?是该列允许存储值的最大宽度吗? 场景1:为什么我设置成 int(1 ...
- 方法(Java)
什么是方法? 基本介绍 在其他语言中也叫函数 System.out.println();类名.对象.方法: Java方法是语句的集合,它们在一起执行一个功能 方法是解决一类问题的步骤的有序集合 方法包 ...
- .netCore Nuget包引用记录
1.画图 System.Drawing.Common 2.
- AE|蒙版、遮罩、轨道遮罩全面解析
相信很多初学者都有这样的困惑,搞不清蒙版和遮罩这两个概念的区别,甚至有的人认为它们就是一个东西. 这两个看似一样的概念,其实是有很大的区别的,今天主要从定义和作用方式这两个方面进行解析,相信对各位认识 ...
- win10edge浏览器个人账户退出登录后再次登录自动登录问题
edge浏览器退出登录后,再次点击登录以同步数据会自动登录,可查看书签等个人数据 解决方法: 先在浏览器里面退出账户. 1.设置--电子邮件和账户--管理 2.登录后--安全--安全仪表板--高级安全 ...