秦九韶算法(霍纳法则)

介绍

秦九韶算法是中国南宋时期的数学家秦九韶提出的一种多项式简化算法。在西方被称作霍纳算法。秦九韶(约公元1202年-1261年),字道古,南宋末年人,出生于鲁郡(今山东曲阜一带人)。

19世纪初,英国数学家威廉·乔治·霍纳重新发现并证明,后世称作霍纳算法(Horner's method、Horner scheme)。

算法介绍

这个算法用于多项式 $\sum_{i=1}^n A_iX^i$ 求值,即求 $f(x)=a_nxn+a_{n-1}x+{\cdots}+a_1x+a_0$ 的值。该多项式可以改写成以下形式:

$f(x)$
$=a_nxn+a_{n-1}x+{\cdots}+a_1x+a_0$
$=(a_nx{n-1}+a_{n-1}x+{\cdots}+a_2x+a_1)x+a_0$
$=((a_nx{n-2}+a_{n-1}x+{\cdots}+a_3x+a_2)x+a_1)x+a_0$
$=({\ldots}((a_nx+a_{n-1})x+a_{n-2})x+{\cdots}+a_1)x+a_0$

这样,可以先计算最内层括号内一次多项式的值,即 $v_1=a_nx+a_{n-1}$,然后由内向外逐层计算一次多项式的值,即:

$v_2=v_1x+a_{n-2}$
$v_3=v_2x+a_{n-3}$
${\cdots}$
$v_n=v_{n-1}x+a_0$

这样就会将一个 n 次多项式 $f(x)$ 的值转化为求 n 个一次多项式的值。对一个 n 次多项式,至多做 n 次乘法和 n 次加法。

算法实现

int horner_scheme(int *an, int n, int x)
{
    int anx = 0;
    for (int i = n; i >= 0; i--) {
        anx = anx * x + an[i];
    }
    return anx;
}

参考
百度百科-秦九韶算法

posted @   tt14  阅读(218)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示