使用快速傅立叶变换的多项式乘法

时间:2009-08-10 20:24:43

标签: algorithm fft polynomial-math

我正在阅读CLRS(CORMEN)(page 834)的上述主题,此时我陷入困境。

任何人都可以解释下面的表达式,

A(x)=A^{[0]}(x^2) +xA^{[1]}(x^2)

来自,

n-1                       `
 Σ  a_j x^j
j=0

其中,

A^{[0]} = a_0 + a_2x + a_4a^x ... a_{n-2}x^{\frac{n}{2-1}}  
A^{[1]} = a_1 + a_3x + a_5a^x ... a_{n-1}x^{\frac{n}{2-1}}

4 个答案:

答案 0 :(得分:4)

多项式A(x)定义为

A(x) = a_0 + a_1 x + a_2 x^2 + a_3 x^3 + ...

为了通过FFT开始多项式乘法的分而治之策略,CLRS引入了两个新的多项式:x的偶数幂系数之一A[0]和其中一个被称为x

A[1]奇数幂的系数
A[0](x) = a_0 + a_2 x + a_4 x^2 + ...
A[1](x) = a_1 + a_3 x + a_5 x^2 + ...

现在,如果我们将x^2替换为A[0]A[1],我们就会

A[0](x^2) = a_0 + a_2 x^2 + a_4 x^4 + ...
A[1](x^2) = a_1 + a_3 x^2 + a_5 x^4 + ...

如果我们将A[1](x^2)乘以x,我们就

x A[1](x^2) = a_1 x + a_3 x^3 + a_5 x^5 + ...

现在,如果我们添加A[0](x^2)x A[1](x^2),我们就有

A[0](x^2) + x A[1](x^2) = (a_0 + a_2 x^2 + a_4 x^4 + ...) + (a_1 x + a_3 x^3 + a_5 x^5 + ...)
                        = a_0 + a_1 x + a_2 x^2 + a_3 x^3 + ...
                        = A(x)

Q.E.D。

答案 1 :(得分:3)

如果将多项式分解为“奇数指数”和“偶数指数”,你会发现A [1]多项式(具有奇数指数的多项式)具有奇怪的指数的烦人事实!对于FFT,即使指数也更容易使用。因此,可以简单地从A [1]中的所有值中分解出单个“x”,并将其移出表达式之外。

FFT喜欢仅使用偶数指数多项式。因此,当你进行分裂和征服时,你想要将你的A [1]表达式转换为“偶数指数”多项式,然后递归,然后然后乘以回来那个x。您将看到在实际算法的内部循环中发生。

编辑:我意识到你的困惑可能源于他们在多项式中“传入​​”(x ^ 2)作为这一事实。 A [1]和A [0]中的“x”与(x ^ 2)表达式中的x不同。你会看到它必须如何,因为当原始多项式A上升到指数N时,A [1]和A [0]都只能达到指数(N / 2)。

答案 2 :(得分:1)

我不会回答你的问题,因为我觉得以前的人已经回答了。我要做的是尝试解释FFT的目的。

首先,FFT是计算两个向量之间的卷积的一种方法。也就是说,假设x =和y =是1xn向量,则x和y的卷积是

\ sum_ {i = 0} ^ n {xi y {n-i}}。

您必须接受这样一个事实,即计算该值对于广泛的应用程序非常有用。

现在考虑以下事项。

假设我们构造了两个多项式

A(z)= x0 + x1 * z + x2 * z ^ 2 + .. + xn ^ z ^ n B(z)= y0 + y1 * z + y2 * z ^ 2 + .. + yn ^ z ^ n

然后乘法是

AB(z)= A(z)B(z)= \ sum_ {i = 0} ^ n(\ sum_ {k = 0} ^ i xk * y {i-k})z ^ i

其中内部和显然是针对不同k值的不同大小的卷积。

现在我们可以通过强力方法清楚地计算出n ^ 2时间内AB的系数(卷积)。

但是,我们也可以更加聪明。考虑这样的事实:任何n次多项式都可以由n + 1个点唯一地描述。给定n + 1个点,我们可以构造经过所有n + 1个点的n次唯一多项式。进一步考虑n + 1个点形式的2个多项式。您可以通过简单地将n + 1个y值相乘并保持x值以点形式生成其产品来计算其产品。现在给出一个n + 1点形式的多项式,你可以找到在O(n)时间内描述它的唯一多项式(实际上我不确定这个,它可能是O(nlogn)时间,但肯定不会更多。)

这正是FFT的作用。然而,非常仔细地选择它来获得n + 1个点以描述多项式A和B的点。有些要点确实很复杂,因为它恰好可以通过考虑这些点来节省评估多项式的​​时间。也就是说,如果您只选择实际点而不是精心选择的FFT,则需要O(n ^ 2)时间来评估n + 1个点。如果选择FFT,则只需要O(nlogn)时间。这就是FFT的全部内容。哦,FFT选择点的方式有一个独特的副作用。给定n次多项式,您必须选择2 ^ m个点,其中m被选择,使得2 ^ m是2的最小幂,大于或等于n。

答案 3 :(得分:0)

A(x) is broken in to even x^2, and odd x parts,

for example if A(x) = 21 x^5 + 17 x^4 + 33 x^3 + 4 x^2 + 8 x + 7

then A0 = 17 y^2 + 4 y + 7
     so that A0(x^2) = 17 x^4 + 4 x^2 + 7

and  A1 = 21 y^2 + 33 y + 8
     so that A1(x^2) = 21 x^4 + 33 x^2 + 8
     or  x * A1(x^2) = 21 x^5 + 33 x^3 + 8 x

clearly, in this case, A(x) = A0(x^2) + x A1(x^2) = even + odd parts
相关问题