【问题标题】:Polynomial multiplication complexity reduction多项式乘法复杂度降低
【发布时间】:2011-02-16 06:24:31
【问题描述】:

我已经尝试了 3 天,但没有得到任何结果。我必须实现多项式乘法(乘以 2 个二次方程)。它们看起来像:

( a1 x^2 + b1 x + c1 ) * ( a2 x^2 + b2 x + c2 );

但更棘手的部分是在 5 个系数乘法中实现它。我已将其减少到 6。例如,a1 * b1, ( a1 + a2 ) * ( b1 + b2 ) 算作一次乘法。但是 (a1 x + a2 ) * ( b1 x + b2 ) 算作 4 (a1 b1, a1 b2, a2 b1, a2 b2)。

【问题讨论】:

  • 你能把减少到 6 次乘法的结果贴出来吗?

标签: algorithm complexity-theory multiplication polynomial-math


【解决方案1】:

您可能想看看多精度乘法中使用的 Toom-3 算法。参考:Toom-Cook multiplication

基本上,您只使用加法和移位来计算 x=-2,-1,0,+1,infinity 处的每个多项式,然后将这 5 个值相乘以获得 x=-2,-1 处的乘积值,0,+1,无​​穷大。最后一步是返回结果的系数。

对于P(X) = A*X^2 + B*X + C,x=-2,-1,0,+1,infinity 处的值是:

P(-2) = 4*A - 2*B + C  (the products here are bit shifts)
P(-1) = A - B + C
P( 0) = C
P(+1) = A + B + C
P(oo) = A

产品R(X) = T*X^4 + U*X^3 + V*X^2 + W*X + K,取值为:

R(-2) = 16*T - 8*U + 4*V - 2*W + K
R(-1) = T - U + V - W + K
R( 0) = K
R(+1) = T + U + V + W + K
R(oo) = T

您知道 x=-2,-1,0,+1,infinity 的值 R(x) = P(x)*Q(x),并且您必须求解这个线性系统以获得系数 T,U,V,W,K。

【讨论】:

  • 谢谢你。我已经3天没睡了。
【解决方案2】:

嗯,我想我找到了答案。

您将其替换为 ( x * ( A1*x + b1 ) + c1 ) * ( x *( a2 * x + b2 ) + c2 );

你有 5 次乘法。

对不起,这是编辑过的,我的第一个答案是错误的,确实有 9 次乘法。

【讨论】:

  • 我认为他算作 9 次乘法。
  • 是的,即 9 次乘法。如果你要我指定,我会做的。但它很明显。
  • @Brahadeesh 这一点都不明显。该公式中有五个乘法。您已将该问题标记为最佳问题,但您似乎坚持要扩展您的方程式。当你想要一些次优的东西时,你就会这样做。
  • @David 对不起。我认为 5 乘法实现是最佳的。
  • @valentin。我不认为那也是5次乘法。令 (a1 x + b1)=m1, (a2 x + b2)=m2。由于 m1c2+m2c1 可以写成 ( m1+c1)(m2+c2) - m1m2 - c1c2。但是 m1m2 需要另外 3 次乘法。所以一共有6次乘法。
【解决方案3】:

我也找到了一个6乘法的解法,可以帮助自己或他人解题。

M1 := (a1 + b1)*(a2 + b2)  
M2 := (a1 + c1)*(a2 + c2)  
M3 := (b1 + c1)*(b2 + c2)  
M4 := a1 * a2  
M5 := b1 * b2  
M6 := c1 * c2

然后给出:

M4 * x^4 + 
(M1 - M4 - M5) * x^3 + 
(M2 - M4 - M6 + M5) * x^2 +
(M3 - M5 - M6) * x +
M6

【讨论】:

  • 感谢您发布此信息。我有同样的解决方案。
猜你喜欢
  • 2020-10-03
  • 1970-01-01
  • 2021-11-30
  • 2023-03-06
  • 2020-06-01
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多