为什么使用快速傅立叶变换评估具有n个点的多项式需要O(n log n)时间?我特别谈到实现一种分而治之的算法,它将多项式A(x)分成偶数幂和奇数幂,然后使用递归。
答案 0 :(得分: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 。稍后你将把它组合起来得到a,b,c,d的3x ^ 3 + 2x ^ 2 + 2x + 7的值。
关键思想:既然你使用了统一的根, 2 中的一半,b 2 ,c 2 ,d 2 是相同的。假设 2 = c 2 和b 2 = d 2 。
所以你需要在 2 ,b 2 点计算3x + 2和2x + 7。
这意味着您将大小为N的实例缩减为两个大小为N / 2且O(N)后处理的实例。
FFT以递归方式重复此过程。这与mergesort的递归方程相同,即O(N log N)复杂度。