我试图为学校作业编写多项式的四个基本运算符。我目前被困在分区部分。维基百科有一个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();
}
}
我试图遵循维基百科的伪代码,但显然我没有完成它。任何帮助将不胜感激:))
答案 0 :(得分:1)
严格遵循伪代码,您将看到接收两个多项式,并返回一个新的多项式。这可能与您的其他运营商不一致,但可能是此处的最佳选择。因此,您的方法标题应该更符合
public QRPair dividePolynomials(LinkedList<Term> a, LinkedList<Term> b)
其中QRPair
是由两个多项式组成的类; quotient
和remainder
。
以下是伪代码的粗略翻译。
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
,是因为这意味着r
和a
会引用我们不想要的同一个对象。同样,如果我们执行r = (LinkedList<Term>)a.clone()
,则r
将拥有链接列表a
的(浅)副本。但是,r
中的每个元素都会引用与a
中的每个元素相同的对象,这也不是我们想要的。我们希望r
中的元素与a
的元素无关。