這裏是我的方法乘以an*x^n + an-1*x^n-1 + ... + a1*x + a0
形式的兩個多項式。每個Term
對象有兩個字段:double coefficient
和int power
。 Polynomial
通過將術語存儲在ArrayList<Term>
中來表示多項式。這個乘法的當前實現是O(n^2)。任何想法或提示如何使其更快?是否存在乘法多項式的更有效方法?
public Polynomial multiply(Polynomial P2) {
PolynomialImp result = new PolynomialImp();
for (Term currentThisTerm : this.terms)
{
for (Term currentP2Term : ((PolynomialImp) P2).terms)
{
result.addTerm(new TermImp(currentThisTerm.getCoefficient()*currentP2Term.getCoefficient(), currentThisTerm.getExponent() + currentP2Term.getExponent()));
}
}
//Sort polynomial in decreasing exponent order
return result.sort();
}
下面是如果需要的話addTerm方法:
private void addTerm(Term nextTerm)
{
for (int i = 0; i < this.terms.size(); i++)
{
if (this.terms.get(i).getExponent() == nextTerm.getExponent())
{
//Add the coefficients if the current term has the same exponent as a term that is already in the polynomial.
//This preserves the sorting of the polynomial except during multiply.
this.terms.set(i, new TermImp(this.terms.get(i).getCoefficient() + nextTerm.getCoefficient(), this.terms.get(i).getExponent()));
return;
}
}
//Avoid adding zeros to the polynomial.
if (nextTerm.getCoefficient() != 0)
this.terms.add(nextTerm);
}
我會使用'double []'數組與每個權力的係數。這仍然是O(n^2)來執行乘法。你確定你需要它更快? –
我不需要它更快,但我想我可能會嘗試學習和咯咯。 – crzrcn
多項式乘法是O(n^2),除非您使用FFT – gtgaxiola