乘以两个多项式 - 不完全是FFT

时间:2013-07-02 14:10:56

标签: algorithm fft

我目前正在研究FFT,但我无法解决以下问题:

写一个“分而治之”的算法,它将两个多项式(最大N度)乘以复杂度:

n ^ log3的theta(基数2 log ofc)

该算法应将两个给定的多项式系数分为两组:

Group1)具有偶数索引的系数。 Group2)具有奇数索引的系数。

嗯,我甚至不知道如何开始考虑解决方案.. 指南似乎与FFT算法类似,但我仍然看不到解决方案。 很想得到一些帮助!甚至只是一种思考它的方式..

请注意,不应提供任何代码..只有解释和伪代码才能完成。

谢谢!

1 个答案:

答案 0 :(得分:1)

以下是一些提示,然后是解决方案。

1 - 首先,你应该确保你可以在一个简单的例子中用少于n ^ 2个系数乘法进行乘法运算:

(aX + b)*(cX + d)

你的一个乘法应该是(a + b)*(c + d)

2 - 还没找到怎么做? 以下是每种力量的操作:

X ^ 2:ac

X:(a + b)*(c + d) - ac - bd

1:bd

你只需要执行3次乘法而不是4次。与乘法相比,增加费用不会那么多。

3 - 你被要求在Theta中找到一个解决方案(n ^ lg(3))。这里有一个'ThéorèmeGénéral'的快速提醒:

设T(n)算法的成本为n次的多项式。

采用“分而治之的策略”导致:

T(n)= aT(n / b)+ f(n)

如果f(n)~O(n ^ lg_b(a))则T(n)= Theta(n ^ lg_b(a))

您正在寻找T(n)= Theta(n ^ lg_2(3))。这可能意味着:

T(n)= 3.T(n / 2)+ epsilon

如果将多项式分为偶数和奇数,它们的初始系数数量为一半:n / 2.

该公式显示您将在奇数和偶数多项之间执行三次乘法...

4 - 考虑以这种方式用度数n表示你的多项式P(x):

P(X)= X.A(X)+ B(X)

A(X)和B(X)包含n / 2个系数。

5 - 解决方案

P(X)= X.A(X)+ B(X)

P'(X)= X.A'(X)+ B'(X)

P * P'(X)的系数是系数之和:

X ^ 2.A.A'

X.(A.B'+ A'.B)= X。[(A + B)(A'+ B') - A.A' - B.B']

B.B'

所以你必须调用你的乘法算法:

A和A'

A + B和A'+ B'

B和B'

然后你可以用移位和加法重新组合系数。

干杯