【问题标题】:Coding Polynomial Division编码多项式除法
【发布时间】:2016-11-29 07:28:28
【问题描述】:

我正在尝试为学校作业编写多项式的四个基本运算符。我目前被困在分区部分。维基百科有一个 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();
    }
}

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

【问题讨论】:

  • Term 是如何实现的?你能给我一个预期输入/输出的例子吗?
  • Term 类有两个参数系数和指数,例如 2x^3 将是 Term(2, 3)。这种划分方法的输入是两个 LinkedList(a 和 b),输出应该是 a 除以 b。使用两个没有余数的多项式,输出应该是另一个多项式。余数将是一个多项式和一个数字。

标签: java linked-list polynomial-math


【解决方案1】:

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

public QRPair dividePolynomials(LinkedList&lt;Term&gt; a, LinkedList&lt;Term&gt; 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&lt;Term&gt;)a.clone(),那么r 将拥有链表a 的(浅)副本。但是,r 中的每个元素都将引用与a 中的每个元素相同的对象,这也不是我们想要的。我们希望r 中的元素独立于a 中的元素。

【讨论】:

  • 感谢您的帮助!我不得不稍微编辑代码以使其适合我的程序,但它应该可以工作。现在我有一些奇怪的逻辑错误出现在另一种方法中,我必须先解决才能检查除法:)
猜你喜欢
  • 2016-05-19
  • 2016-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-15
  • 1970-01-01
相关资源
最近更新 更多