【算法】-000 一维多项式求值

【算法】-000 一维多项式求值

1、一维多项式的定义

  一维多项式是指如下所示的一元多项式:

p ( x ) = a n 1 x n 1 + a n 2 x n 2 + a n 3 x n 3 + + a 2 x 2 + a 1 x + a 0

  一维多项式的求值就是求 p ( x ) x 处的值。

2、普通解法

  普通解法是按照常规做法,一项一项的求值,分别计算 x n 1 ,在计算 a n 1 x n 1 的乘积,并将最后的结果相加,得到计算结果。

  这种做法需要的计算量如下:

  计算 x 2 需要1次乘法, x 3 需要两次乘法, x 4 需要3次乘法,再加上前面与系数的乘法,一共需要进行

N = 1 + 2 + 3 + 4 + + ( n 2 ) + ( n 1 ) = n ( n 1 ) 2
次乘法,因此,其时间复杂度为 O ( n 2 ) ,空间复杂度可以做到 O ( 1 )

3、变形解法

  将一维多项式变形成

p ( x ) = ( ( ( a n 1 x + a n 2 ) x + a n 3 ) x + + a 1 ) x + a 0

  可以看出,这一解法的乘法计算量并未减少,算法的时间复杂度仍然为 O ( n 2 ) ,空间复杂度为 O ( 1 )

4、空间换时间

  对于一维多项式,过程中需要多次求解 x k ,并且在 x k + 1 = x k × x ,因此,可以在计算过程中将 x k 结果保存下来,在下次求解更高次幂的时候可以使用。

  此时,计算 x n 1 需要的乘法次数为 n 2 次,各项与其系数相乘共需进行 n 2 次乘法,因此,一共的乘法次数为 2 n 2 次,所以时间复杂度为 O ( n ) 。但算法执行过程中需要使用空间对 x n 1 的计算过程进行存储,共需存储 n 2 个计算结果,因此,空间复杂度为 O ( n )

  由此可见,虽然算法的时间复杂度降低了,但同时其空间复杂度上升了,时间和空间需要进行平衡。需要根据算法的使用场景来选择算法。

5、多项式稀疏时的情况

  这里的多项式稀疏是指一维多项式中,指数不连续,通常指指数值很大,但项数很少,例如

p ( x ) = a 100000 x 100000 + a 3 x 3 + a 2 x 2 + a 1 x 1 + a 0

  可以看出,直接计算时,乘法次数为100000+3+2+1次,额外空间为1。但使用时间换空间算法时,乘法次数为100000+1+1,额外空间为100000。算法并未明显改善时间复杂度同时浪费了空间。

猜你喜欢

转载自blog.csdn.net/freehawkzk/article/details/81515756