[英]Polynomial Class: Polynomial Multiplication
我有一个Polynomial
类,它有一个get_vect
成员函数,它将一个整数存储在一个向量中,该向量是多项式系数的表示。 现在,我试图使用Multiply
非成员函数将两个多项式Multiply
,但是当涉及向量的实际乘法时,我会陷入困境。 到目前为止,我所拥有的是如下所示:
Polynomial Multiply(const Polynomial & poly1, const Polynomial & poly2)
{
vector<int> Poly1 = poly1.get_vect();
vector<int> Poly2 = poly2.get_vect();
vector<int> Poly3;
if( Poly1.size() < Poly2.size() )
{
for(size_t i = 0 ; Poly2.size()-Poly1.size() ; ++i )
{
Poly2.push_back(0);
}
}
else if( Poly1.size() > Poly2.size() )
{
for(size_t i = 0 ; Poly1.size()-Poly2.size() ; ++i )
{
Poly1.push_back(0);
}
}
return Poly3;
}
我看到一些如何遵循以下模式:
好的,所以如果我正确理解了这个问题,你希望Poly3
是一个vector<int>
,它保存由Poly1
和Poly2
表示的多项式之间的多项式乘法产生的系数。
该请求中的默认是所有三个多项式都是单个变量中的多项式,每个系数表示该变量的增加幂之前的系数。 即。 { 4, 5, 6, 7 }
4,5,6,7 { 4, 5, 6, 7 }
对应于4 + 5x + 6x 2 + 7x 3 。
如果是这样的话,那么实际的乘法就不应该那么困难,只要你的多项式不是很大。 您需要看起来像这样的代码:
Poly3.resize(Poly1.size() + Poly2.size() - 1, 0); // Make the output big enough; init to 0
for (size_t i = 0; i != Poly1.size(); i++)
for (size_t j = 0; j != Poly2.size(); j++)
Poly3[i+j] += Poly1[i] * Poly2[j];
现在Poly3
的结果应该是Poly1
和Poly2
的产物。
我完全有可能忘记边缘条件; 我会在这里留意评论,指出我的所作所为。 与此同时,我做了一些测试,看起来这给出了正确的输出。
如果您有相当大的多项式,那么您可能需要查看数学库来处理乘法。 但是对于任何低于20-30的条款? 除非你的代码在这个多项式评估上非常努力,否则我怀疑这不会成为你的瓶颈。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.