算法描述:
符号多项式的操作,已经成为表处理的典型用例。在数学上,一个一元多项式
P
n
(
x
)
P_n(x)
Pn(x)可按升幂写成:
P
n
(
x
)
=
p
0
+
p
1
x
+
p
2
x
2
+
.
.
.
+
p
n
x
n
P_n(x) =p_{0} + p_1x + p_2x^2 + ... + p_nx^n
Pn(x)=p0+p1x+p2x2+...+pnxn
它由n+1个系数唯一确定。因此,在计算机里,它可用一个线性表
P
P
P来表示:
P
=
(
p
0
,
p
1
,
p
2
,
.
.
.
,
p
n
)
P = (p_0,p_1,p_2,...,p_n)
P=(p0,p1,p2,...,pn)每一项的指数i隐含在其系数pi的序号里。
假设
Q
m
(
x
)
Q_m(x)
Qm(x)是一元m次多项式,同样可用线性表
Q
Q
Q来表示:
Q
=
(
q
0
,
q
1
,
q
2
,
.
.
.
,
q
m
)
Q = (q_0,q_1,q_2,...,q_m)
Q=(q0,q1,q2,...,qm)
不失一般性,设
m
<
n
m < n
m<n,则两个多项式相加的结果
R
n
(
x
)
=
P
n
(
x
)
+
Q
m
(
x
)
R_n(x) = P_n(x) + Q_m(x)
Rn(x)=Pn(x)+Qm(x)可用线性表
R
R
R 表示:
R
=
(
p
0
+
q
0
,
p
1
+
q
1
,
p
2
+
q
2
,
.
.
.
,
p
m
+
q
m
,
p
m
+
1
,
.
.
.
,
p
n
)
R = (p_0 + q_0,p_1 + q_1,p_2 + q_2,...,p_m + q_m,p_{m+1},...,p_n)
R=(p0+q0,p1+q1,p2+q2,...,pm+qm,pm+1,...,pn)
显然,我们可以对
P
,
Q
,
R
P,Q,R
P,Q,R采用顺讯存储结构,使得多项式相加的算法定义十分简洁。至此,一元多项式的表示及相加问题似乎已经解决了。然而,在通常的应用中,多项式的次数可能很好且变化很大,使得顺序存储结构的最大长度很难确定。特别是在处理式的次数可能很高且变化很大,使得顺序存储结构的最大长度很难确定。比如
S
(
x
)
=
1
+
3
x
10000
+
2
x
20000
S(x) = 1 + 3x^{10000} + 2x^{20000}
S(x)=1+3x10000+2x20000
一般情况下的一元n次多项式可写成
P
n
(
x
)
=
p
1
x
e
+
p
2
x
e
2
+
.
.
.
+
p
m
x
e
m
P_n(x) = p_1x^e + p_2x^{e_2} + ... + p_m{x^{e_m}}
Pn(x)=p1xe+p2xe2+...+pmxem
其中,
p
i
p_i
pi是指数为
e
i
e_i
ei的项的非零系数,且满足
0
≤
e
1
<
e
2
<
.
.
.
<
e
m
=
n
0 \leq e_1 < e_2 < ... < e_m = n
0≤e1<e2<...<em=n
若用一个长度为
m
m
m且每个元素有两个数据项(系数项和指数项)的线性表
(
(
p
1
,
e
1
)
,
(
p
2
,
e
2
)
,
.
.
.
,
(
p
m
,
e
m
)
)
((p_1,e_1),(p_2,e_2),... ,(p_m,e_m))
((p1,e1),(p2,e2),...,(pm,em))便可唯一确定多项式
P
n
(
x
)
P_n(x)
Pn(x)。
在最坏情况下,
n
+
1
(
=
m
)
n+1(=m)
n+1(=m)个系数都不为零,则比只存储每项系数的方案要多存储一倍的数据。
但是,对于
S
(
x
)
S(x)
S(x)类的多项式,这种表示将大大节省空间。