霍納法則(Horner Rule)介紹及C語言實現


熱烈的笑臉參考自:http://flynoi.blog.hexun.com/31272178_d.html

紅心霍納法則簡介

假設有n+2個實數a0,a1,…,an,和x的序列,要對多項式Pn(x)= anxn+an-1xn-1+…+ax+a求值,直接方法是對每一項分別求值,並把每一項求的值累加起來,這種方法十分低效,它需要進行n+(n-1)+…+1=n(n+1)/2次乘法運算和n次加法運算。有沒有更高效的算法呢?答案是肯定的。通過如下變換我們可以得到一種快得多的算法,即Pn(x)= anxn +an-1xn-1+…+ax+a=((…(((anx +an-1)x+an-2)x+ an3)…)x+a1)x+a,這種求值的安排我們稱為霍納法則。

紅心霍納法則C語言實例

/* 霍納算法實例 */

#include <stdio.h>

long int 
horner(int coefficient[], int n, int x) //coefficient[]為待求多項式的系數數組,n為數組大小,x為多項式中未知數x的具體值
{                                       //注意:coefficient[0]存放系數a0,coefficient[1]存放系數a1,以此類推…
    int i;
    long int result;
    
    result = coefficient[n-1];
    for(i = 1; i <= n-1; i++)
    {
        result = result * x + coefficient[n-1-i];
    }

    return result;
}

int 
main(void)
{
    long int p;
    int a[4] = {3, 2, 1, 1};
    p = horner(a, 4, 1);
    printf("polynomial x^3 + x^2 + 2x + 3 = %ld\n", p);
}

實例測試結果:

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM