首页 > 其他分享 >【笔记】快速傅里叶变换

【笔记】快速傅里叶变换

时间:2024-02-03 23:25:13浏览次数:21  
标签:omega 变换 多项式 单位根 笔记 theta 2.2 傅里叶

快速傅里叶变换

0 记号

  1. \(\exp(x)=e^x\)。

1 复数 (Complex)

1.1 三种形式

  1. 代数形式:\(z=a+bi\),其中 \(a,b\in\mathbb R\)。

  2. 三角形式:\(z=r(\cos\theta+i\sin\theta)\),其中 \(r=\sqrt{a^2+b^2}\)(\(a,b\) 是在代数形式中定义的)。

  3. 指数形式:\(z=r\cdot e^{i\theta}\)。

    根据 欧拉公式

    \[e^{ix}=\cos x+i\sin x,x\in\mathbb C \]

    令 \(x=\theta\),再带入三角形式中,即可得指数形式。


1.2 单位根 (unit root)

对于方程 \(x^n=1\),在复数意义下,她有 \(n\) 个解,我们称这 \(n\) 个解都是 单位根 (unit root)

定义 \(\boxed{\omega_n=\exp\frac{2\pi i}n}\),则这 \(n\) 个单位根可以表示为 $ {\omega_n^k\mid k=0,1\cdots,n-1} $。

在复平面中,\(n\) 次单位根把单位圆 \(n\) 等分。


2 快速傅里叶变换 (Fast Fourier Transform)

FFT 可以在 \(O(n\log n)\) 的时间复杂度内,计算多项式乘法,而不是暴力的 \(O(n^2)\)。

2.1 定义

对于一个多项式 \(f(x)\),定义快速傅里叶变换为:

\[\boxed{\mathcal F(f(x))=\left(f(1),f(\omega_n),\dots,f(\omega_n^n)\right)} \]

快速傅里叶变化实际上可以理解为一种「从一个多项式到一个 \(n\) 维向量的映射/变化规则」(?

2.2 求解

2.2.1 引入

一种思想:

考虑如何计算 \(\sum\limits_{i=0}^na_ix^i\)。

一般的方法是,枚举 \(i\),然后维护 \(x^i\) 的值 \(k\),再将 \(a_i\) 与 \(k\) 相乘并累加。精细统计的话,这样应该需要 \(2n\) 次乘法。

另一种办法是:

\[\begin{aligned}\sum\limits_{i=0}^na_ix^i &=a_0+a_1x+\cdots+a_nx^n\\ &=a_0+x\left(a_1+x\left(a_2+\cdots xa_n\right)\right)&\text{【就是每次都把后面一部分提一个 }x\text{ 出来】} \end{aligned}\]

如果是这样计算,总共只需要 \(n\) 次计算。

借用上述思想,对于一个多项式 \(f(x)\),我们可以做如下的变换。

2.2.2 实现

2.2.3 Code

2.3 优化多项式乘法

标签:omega,变换,多项式,单位根,笔记,theta,2.2,傅里叶
From: https://www.cnblogs.com/CloudWings/p/18005389

相关文章

  • 数学の总结(笔记 + 自学)
    写在「开始」之前:由于笔者从初中二年级就踏上了数学的学习路程,再加上笔者理解力比较强,若有说的不明白的地方,还望指正,thx1.集合我们知道,一个字母可以表示一个数,比如说\(a=0\)。那么,有没有一种东西,可以容纳很多个字母呢?答案是肯定的,数学家们提出了一种叫做集合的一种容器,其中......
  • einops 学习笔记:基础篇
    参考:https://einops.rocks/1-einops-basics/einops(EinsteinOperations)提供了一种语法来便捷地操纵张量。einops支持大多数张量库(当然包括numpy和pytorch)。einops针对所有张量库的语法都完全一致。einops不会影响反向传播的正常进行。这些特性意味着einops可以和现有......
  • 大部分程序员记笔记
    大部分程序员学习记笔记的方式都是错的 很多程序员看B站看网课,他记笔记就是看一下记下。还有就是他把这块听完了,听完一块记一块。这种方式记笔记的话,记笔记效率是很低的。比如一个视频两个小时,你记笔记就差不多比两个小时还多了,就比如......
  • 多项式学习笔记
    多项式学习笔记泰勒展开有\(F(x)=F(x_{0})+\frac{F'(x_{0})}{1!}(x-x_{0})+\frac{F'(x_{0})}{2!}(x-x_{0})^{2}\cdots+\frac{F^{(n)}(x_{0})}{n!}(x-x_{0})^{n}\)给定\(G(x)\)求解\(G(F(x))\equiv0\bmodx^{n}\)的\(F(x)\)。考虑分治:设\(f_{0}(x)\)是$G(F(......
  • 后缀自动机学习笔记
    点击查看代码#include<bits/stdc++.h>usingnamespacestd;structt1{ intl,ta; longlonglen,cnt; map<char,int>q;}t[2000005];vector<int>a[2000005];inttot,la;longlongans;voidcalc(intx){ if(t[x].cnt>1) { ans=max(ans,t[x].l......
  • 【阅读笔记】《A New Hardware-Efficient Algorithm and Reconfigurable Architecture
    一、对比度增强算法AGCWD硬件化实现2013年发表在TIP上的对比度增强算法AGCWD(Efficientcontrastenhancementusingadaptivegammacorrectionwithweightingdistribution)2014年发表在IEEETransactionsonImageProcessing的《ANewHardware-EfficientAlgorithmandReco......
  • RabbitMQ 学习笔记 - 1
    RabbitMQ的基础概念生产者产生数据发送消息的程序是生产者交换机交换机是RabbitMQ非常重要的一个部件,一方面它接收来自生产者的消息,另一方面它将消息推送到队列中。交换机必须确切的知道如何处理它接收到的消息,是将这些消息推送到特定队列还是推送到多个队列,亦或者是把消息丢......
  • 【阅读笔记】对比度增强-《Efficientcontrast enhancement using adaptive gamma corr
    2013年发表在TIP上的对比度增强算法AGCWD(Efficientcontrastenhancementusingadaptivegammacorrectionwithweightingdistribution)提出了一种自动映射技术,通过亮度像素的伽马校正和概率分布来提高调暗图像的亮度。为了增强视频,所提出的图像增强方法使用关于每帧之间差异的......
  • 【阅读笔记】对比度增强-《Efficientcontrast enhancement using adaptive gamma corr
    2013年发表在TIP上的对比度增强算法AGCWD(Efficientcontrastenhancementusingadaptivegammacorrectionwithweightingdistribution)提出了一种自动映射技术,通过亮度像素的伽马校正和概率分布来提高调暗图像的亮度。为了增强视频,所提出的图像增强方法使用关于每帧之间差异的......
  • Pandas库学习笔记(4)---Pandas DataFrame
    PandasDataFrame  PandasDataFrame基本操作DataFrame是二维数据结构,即,数据以表格形式在行和列中对齐。DataFrame的功能潜在的列是不同类型的大小可变标记的轴(行和列)可以对行和列执行算术运算结构体pandas.SeriesSeries结构如下: 让我们假设我们正在使用学生的数......