📜  多项式评估的霍纳法(1)

📅  最后修改于: 2023-12-03 15:08:11.126000             🧑  作者: Mango

多项式评估的霍纳法

多项式评估是一个重要的计算问题,通常要求给定一个多项式和一个值,计算多项式在这个值处的取值。在实际应用中,多项式通常是通过一些运算得到的,因此需要高效的算法进行计算。

霍纳法是一种多项式评估的高效算法,它通过将多项式表达式变形,将多项式计算转化为加减乘除等基本运算的组合计算,从而降低了计算的复杂度。这种算法特别适合于多项式系数已知的情况,因为它可以只需要一次遍历多项式系数,不需要额外的存储空间。

算法思路

设有一个 $n$ 次多项式 $P(x)$,其表达式为

$$P(x)=a_n x^n + a_{n-1}x^{n-1} + \cdots + a_1 x + a_0$$

其中 $n$ 是多项式次数,$a_i$ 是非负整数。可以将这个多项式变形为下面的形式:

$$P(x) = ((\cdots((a_n x + a_{n-1})x + a_{n-2}) \cdots ) x + a_1)x + a_0$$

这个表达式就是霍纳法的核心思想,它实际上是一种从高次项到低次项的累加式计算。具体来说,从左向右遍历,每次累加上一个常数,再乘上 $x$,继续计算下一个常数,直到最后得到多项式在 $x$ 处的取值。

这个表达式可以用如下的循环实现:

def horners_method(coefs, x):
    res = coefs[-1]
    for i in range(len(coefs)-2, -1, -1):
        res = res * x + coefs[i]
    return res

其中 coefs 是多项式系数列表,倒序存储。循环中的 range 函数从高次项开始遍历,依次计算每一项。

霍纳法的时间复杂度为 $O(n)$,和多项式次数成线性关系,因此相比于朴素的多项式计算,霍纳法可以在很大程度上减少计算次数,并提升运行效率。

总结

霍纳法是一种高效的多项式计算算法,在实际应用中经常被使用。它的算法思路简单,易于实现,同时时间复杂度较低,能够满足大部分实际应用的需求。如果您需要对多项式进行计算,可以考虑使用霍纳法进行优化。