參考自:http://flynoi.blog.hexun.com/31272178_d.html
霍納法則簡介
假設有n+2個實數a0,a1,…,an,和x的序列,要對多項式Pn(x)= anxn+an-1xn-1+…+a1x+a0求值,直接方法是對每一項分別求值,並把每一項求的值累加起來,這種方法十分低效,它需要進行n+(n-1)+…+1=n(n+1)/2次乘法運算和n次加法運算。有沒有更高效的算法呢?答案是肯定的。通過如下變換我們可以得到一種快得多的算法,即Pn(x)= anxn +an-1xn-1+…+a1x+a0=((…(((anx +an-1)x+an-2)x+ an-3)…)x+a1)x+a0,這種求值的安排我們稱為霍納法則。
霍納法則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); }
實例測試結果: