FFT
2026-07-05 08:56:53
发布于:浙江
一、
给定多项式:
目标:快速计算:
暴力复杂度:
FFT 目标:
二、单位根)
1. n 次单位根定义
性质:
2 基本引理
折半引理
消去引理
三、多项式拆分
将 A(x) 按奇偶拆分:
其中:
四、DFT 递归
在单位根处求值:
代入奇偶分解:
由折半引理:
于是:
同理:
一对结果,只用算一半
五、递归 FFT 伪代码
fft(a):
n=size(a)
if n==1:return a
ae=a[0,2,...]
ao=a[1,3,...]
ye=fft(ae)
yo=fft(ao)
for k=0→n/2-1:
w=pow(w_n,k)
y[k]=ye[k]+w*yo[k]
y[k+n/2]=ye[k]-w*yo[k]
return y
复杂度:
六、蝴蝶操作
核心计算单元:
这就是蝴蝶结构的来源。
七、迭代 FFT
1. 递归的问题
- 函数调用开销
- 内存访问不连续
2. 迭代思想
- 自底向上合并
- 每一层处理长度为
len的区间
3. 位逆序置换(Rader)
索引二进制反转后排序:
000↔000
001↔100
010↔010
011↔110
目的:让递归叶子顺序对齐~
八、迭代 FFT の流程
bitReverse(a)
for len=2→n step*=2:
wlen=pow(w_n, n/len)
for i=0→n step+=len:
w=1
for k=i→i+len/2:
u=a[k]
v=w*a[k+len/2]
a[k]=u+v
a[k+len/2]=u-v
w*=wlen
九、逆 FFT(IFFT)
DFT 矩阵:
逆变换:
实现方法:
把 ω_n 换成 ω_n^{-1}
最后整体除以 n
十、卷积
多项式乘法:
步骤:
复杂度:
十一、边界条件
| 项目 | 要求 |
|---|---|
| n | 2 的幂 |
| 模运算 | NTT |
| 精度 | double / long double |
| 长度 | ≥ deg(a)+deg(b)+1 |
十二、速记公式卡片
本人除了爱写一些暴力算法就没啥好些的
这里空空如也















有帮助,赞一个