【算法】-000 一维多项式求值
1、一维多项式的定义
一维多项式是指如下所示的一元多项式:
p(x)=an−1xn−1+an−2xn−2+an−3xn−3+⋯+a2x2+a1x+a0
一维多项式的求值就是求
p(x)
在
x
处的值。
2、普通解法
普通解法是按照常规做法,一项一项的求值,分别计算
xn−1
,在计算
an−1
与
xn−1
的乘积,并将最后的结果相加,得到计算结果。
这种做法需要的计算量如下:
计算
x2
需要1次乘法,
x3
需要两次乘法,
x4
需要3次乘法,再加上前面与系数的乘法,一共需要进行
N=1+2+3+4+⋯+(n−2)+(n−1)=n(n−1)2
次乘法,因此,其时间复杂度为
O(n2)
,空间复杂度可以做到
O(1)
。
3、变形解法
将一维多项式变形成
p(x)=((…(an−1x+an−2)x+an−3)x+⋯+a1)x+a0
可以看出,这一解法的乘法计算量并未减少,算法的时间复杂度仍然为
O(n2)
,空间复杂度为
O(1)
。
4、空间换时间
对于一维多项式,过程中需要多次求解
xk
,并且在
xk+1=xk×x
,因此,可以在计算过程中将
xk
结果保存下来,在下次求解更高次幂的时候可以使用。
此时,计算
xn−1
需要的乘法次数为
n−2
次,各项与其系数相乘共需进行
n−2
次乘法,因此,一共的乘法次数为
2n−2
次,所以时间复杂度为
O(n)
。但算法执行过程中需要使用空间对
xn−1
的计算过程进行存储,共需存储
n−2
个计算结果,因此,空间复杂度为
O(n)
。
由此可见,虽然算法的时间复杂度降低了,但同时其空间复杂度上升了,时间和空间需要进行平衡。需要根据算法的使用场景来选择算法。
5、多项式稀疏时的情况
这里的多项式稀疏是指一维多项式中,指数不连续,通常指指数值很大,但项数很少,例如
p(x)=a100000x100000+a3x3+a2x2+a1x1+a0
可以看出,直接计算时,乘法次数为100000+3+2+1次,额外空间为1。但使用时间换空间算法时,乘法次数为100000+1+1,额外空间为100000。算法并未明显改善时间复杂度同时浪费了空间。