一元多项式的表示及相加
假设是一元m次多项式,同样可用线性表Q来表示:
不失一般性,设另有一多项式,且m
小于n
,则两个多项式相加的结果为:.
于是,我们可以对P
,Q
,R
采用顺序存储结构,使得多项式相加的算法定义十分简洁。
但是,在通常应用中,多项式的次数可能很高且变化很大,比如,需要一长度为20001的线性表来表示,表中仅有3个非零元素,对于此情况,会造成空间的浪费,但是如果只存储非零系数项则显然必须同时存储相应指数。
一般情况下的一元n次多项式,其中qi是指数为ei的项的非零系数,且满足便使用
可确定唯一多项式.
在最坏情况下,n+1(=m)
个系数都不为零,则比只存储每项系数的方案要多存储一倍的数据。但是对于S(x)
类的多项式,这种表示大大节省空间。
存储结构
对于线性表的两种存储结构,两种表示方法也可以有两种存储结构方法。
在实际的应用程序中取哪一种,则要视多项式做何种运算而定:
如果只对多项式进行 “求值”等不改变多项式的系数和指数的运算,则采用类似顺序表的顺序存储结构即可,否则应采用链式存储表示。
个人理解:如果存在改变多项式的系数和指数的运算,则涉及线性表的元素的插入(零变非零)和删除(非零变零)操作,如果插入和删除操作较多,则更适合链式存储表示。
相加
“和多项式”链表中的结点无需另生成,而应该从来嗯个多项式的链表中摘取。运算规则如下:
假设指针qa
和qb
分别指向多项式A和多项式B中当前进行比较的某个结点,则比较两个结点中的指数项,有下面三种情况:
- 指针
qa
所指结点的指数值小于指针qb
所指结点的指数值,则摘取qa
所指结点插入到“和多项式”链表中; - 指针
qa
所指结点的指数值大于指针qb
所指结点的指数值,则摘取qb
所指结点插入到“和多项式”链表中; - 指针
qa
所指结点的指数值等于指针qb
所指结点的指数值,则将两个结点中的系数相加,若和数不为零,则修改qa
所指结点的系数值,同时释放qb
所指结点;反之,从多项式A的链表删除相应结点,并释放指数qa
和qb
所指结点。
相乘
两个一元多项式相乘的算法,可以利用两个一元多项式相加的算法来实现。(因为乘法元算可以分解为一系列的加法运算)
假设A(x)
和B(x)
相乘,则计算M(x)
:
其中,每一项都是一个一元多项式。