0

为什么使用快速傅里叶变换计算具有 n 个点的多项式需要 O(n log n) 时间?我具体谈论的是实现一个分而治之的算法,将多项式 A(x) 分成偶数次幂和奇数次幂,然后使用递归。

4

1 回答 1

3

令 T(n) 为 FFT 算法在 n 点处计算 n 次多项式所使用的时间。

算法分裂

A(x)=xB(x^2)+C(x^2),

即分成两个多项式:奇数和偶数系数。例如:3x^3 + 2x^2 + 9x + 7 被拆分为 x(3x^2 + 9) + (2x^2 + 7)。

最初您想在 a、b、c、d 点计算 3x^3 + 2x^2 + 9x + 7。

现在您要在 a 2、 b 2、 c 2、 d 2点计算 3x+9 和 2x+7 。稍后,您将结合它在 a、b、c、d 处获得 3x^3 + 2x^2 + 2x + 7 的值。

关键思想:由于您使用单位根,因此 a 2、 b 2、 c 2、 d 2中的一半值是相同的。假设a 2 =c 2和b 2 =d 2

因此,您需要在 a 2、 b 2点计算 3x+2 和 2x+7 。

这意味着您将大小为 N 的实例减少为大小为 N/2 和 O(N) 后处理的两个实例。

FFT 递归地重复这个过程。这是与归并排序相同的递归方程,即 O(N log N) 复杂度。

于 2012-05-13T23:11:20.453 回答