编码多项式分部

时间:2016-11-29 07:28:29

标签: java linked-list polynomial-math

我试图为学校作业编写多项式的四个基本运算符。我目前被困在分区部分。维基百科有一个pseudo code的模型,但我无法在我的代码中正确实现它。赋值的一部分也是使用LinkedList,因此我的每个多项式都是一个LinkedList,其中Term对象包含系数和指数变量。

这是我到目前为止所拥有的:

public void dividePolynomials(LinkedList<Term> a, LinkedList<Term> b)
{
    LinkedList<Term> q = new LinkedList<Term>;
    LinkedList<Term> r = a;

    while(!isEmpty(r) && (r.highestDegree() > d.highestDegree()))
    {
        int co = r.get(0).getCo()/d.get(0).getCo();
        int ex = r.get(0).getEx()/d.get(0).getEx();
        Term t = new Term();
    }
}

我试图遵循维基百科的伪代码,但显然我没有完成它。任何帮助将不胜感激:))

1 个答案:

答案 0 :(得分:1)

严格遵循伪代码,您将看到接收两个多项式,并返回一个新的多项式。这可能与您的其他运营商不一致,但可能是此处的最佳选择。因此,您的方法标题应该更符合

public QRPair dividePolynomials(LinkedList<Term> a, LinkedList<Term> b)

其中QRPair是由两个多项式组成的类; quotientremainder

以下是伪代码的粗略翻译。

public LinkedList<Term> deepCopy(LinkedList<Term> p)   {
    //implement this!
}
public QRPair dividePolynomials(LinkedList<Term> a, LinkedList<Term> b) {
    LinkedList<Term> q = "0"    //set q to be the polynomial 0
    LinkedList<Term> r = deepCopy(a);  //want a copy of a, not just reference.      
    while(!isEmpty(r) && (r.highestDegree() > d.highestDegree()))
    {
            int co = r.get(0).getCo()/d.get(0).getCo();
            int ex = r.get(0).getEx()/d.get(0).getEx();
            Term t = new Term(co,ex);
            q = addPolynomials(q,t);
            r = subtractPolynomials(r,multiplyPolynomials(t,d));
            //assume subtract/multiplyPolynomial returns LinkedList<Term>
    }
    return QRPair(q,r);
}

请注意,您仍需要实施deepCopy。我们之所以无法执行作业r = a,是因为这意味着ra会引用我们不想要的同一个对象。同样,如果我们执行r = (LinkedList<Term>)a.clone(),则r将拥有链接列表a的(浅)副本。但是,r中的每个元素都会引用与a中的每个元素相同的对象,这也不是我们想要的。我们希望r中的元素与a的元素无关。