一元多项式的表示及相加

Published: by Creative Commons Licence

假设Q_m(x)是一元m次多项式,同样可用线性表Q来表示:

线性表Q

不失一般性,设另有一多项式P_n(x),且m小于n,则两个多项式相加的结果R_n(x)为:R.

于是,我们可以对P,Q,R采用顺序存储结构,使得多项式相加的算法定义十分简洁。

但是,在通常应用中,多项式的次数可能很高且变化很大,比如S(x),需要一长度为20001的线性表来表示,表中仅有3个非零元素,对于此情况,会造成空间的浪费,但是如果只存储非零系数项则显然必须同时存储相应指数。

一般情况下的一元n次多项式一元n次多项式,其中qi是指数为ei的项的非零系数,且满足ei关系便使用

第二种表示

可确定唯一多项式P_n(x).

在最坏情况下,n+1(=m)个系数都不为零,则比只存储每项系数的方案要多存储一倍的数据。但是对于S(x)类的多项式,这种表示大大节省空间。

存储结构

对于线性表的两种存储结构,两种表示方法也可以有两种存储结构方法。

在实际的应用程序中取哪一种,则要视多项式做何种运算而定:

如果只对多项式进行 “求值”不改变多项式的系数和指数的运算,则采用类似顺序表的顺序存储结构即可,否则应采用链式存储表示。

个人理解:如果存在改变多项式的系数和指数的运算,则涉及线性表的元素的插入(零变非零)和删除(非零变零)操作,如果插入和删除操作较多,则更适合链式存储表示。

相加

“和多项式”链表中的结点无需另生成,而应该从来嗯个多项式的链表中摘取。运算规则如下:

假设指针qaqb分别指向多项式A和多项式B中当前进行比较的某个结点,则比较两个结点中的指数项,有下面三种情况:

  1. 指针qa所指结点的指数值小于指针qb所指结点的指数值,则摘取qa所指结点插入到“和多项式”链表中;
  2. 指针qa所指结点的指数值大于指针qb所指结点的指数值,则摘取qb所指结点插入到“和多项式”链表中;
  3. 指针qa所指结点的指数值等于指针qb所指结点的指数值,则将两个结点中的系数相加,若和数不为零,则修改qa所指结点的系数值,同时释放qb所指结点;反之,从多项式A的链表删除相应结点,并释放指数qaqb所指结点。

相乘

两个一元多项式相乘的算法,可以利用两个一元多项式相加的算法来实现。(因为乘法元算可以分解为一系列的加法运算)

假设A(x)B(x)相乘,则计算M(x):

相乘

其中,每一项都是一个一元多项式。