1. FFT 的核心思想中系数表示与点值表示的转换、单位根的性质、分治(蝶形运算)如何把卷积降到 O(n log n)?
FFT 的核心思想是什么?系数表示与点值表示如何转换,单位根的性质与蝶形运算如何把卷积降到 O(n log n)?
- 系数表示与点值表示
- 单位根的性质
- 分治蝶形运算
FFT 的核心是用点值表示替代系数表示:一个 n-1 次多项式(共 n 个系数)由 n 个点值唯一确定,且点值相乘即可得到卷积的多项式点值。FFT 在 n 个单位根 ω=exp(2πi/n) 处对多项式求值,利用单位根的性质 ω^{k+n/2} = -ω^k 和 ω_k = ω_{2k}^2 实现分治:把多项式按奇偶拆成两个系数子多项式,递归求值,使得每个点值只需 O(log n) 层、每层 O(n) 次蝶形运算,总复杂度 O(n log n)。逆变换(IDFT)用共轭单位根再除以 n 即可还原系数。
"点值相乘"这一步把卷积的 O(n^2) 降为 O(n),求值与插值各用分治 O(n log n),三者合计 O(n log n) 完成卷积。
// 蝶形运算核心:合并两个子结果
// t = a[k+i] * w, 则 a[k+i] = a[k] - t, a[k] = a[k] + t