霍納(horner)規則是採用最少的乘法運算策略,來求多項式
a(x)=an
xn+a
n−1x
n−1+
...+
a1x+
a0
在x0處的值。
該規則為
a(x0)=(
...(
(anx
0+an
−1)x
0+..
.+a1
)x0+
a0)如果光看著式子或許會有點煩躁,不妨手動設定幾個值到式子中去來手工運算一番,這樣一來也會有些親身的理解。
通過分解我們注意到,從右往左來看,每乙個小式子都是如此:
somethi
ng∗x
0+ai
c語言版
#include
#include
int hornerrule(int
list,int m,int x0);
int main()
printf("enter an integer for x0: \n");
scanf("%d",&x0);
printf("%d",hornerrule(list,m,x0));
return0;}
int hornerrule(int
list,int m,int x0)
c++語言版
(ps:博主有一段時間沒有碰scheme有點忘了,所以下面的**可能有些……粗糙)
關於scheme可以看這裡:
專欄:sicp練習
專欄:scheme歸納
(define
(horner list m x0)
(define
(horner-iter ls n)
(if (<=
n1)(car ls)
(+ (car ls)
(* (horner-iter
(cdr ls)
(- n1)) x0))))
(horner-iter list m))
(define list '(121
031));value: list
(horner list6
10);value: 130121
霍納法則 Horner s rule
霍納法則簡介 假設有n 2個實數a0,a1,an,和x的序列,要對多項式pn x anxn an xn a x a 求值,直接方法是對每一項分別求值,並把每一項求的值累加起來,這種方法十分低效,它需要進行n n 1 1 n n 2次乘法運算和n次加法運算。有沒有更高效的演算法呢?答案是肯定的。通過如...
歸併排序 霍納規則(法則) 統計逆序對
歸併排序 算導 p20 分治法中的遞迴式是基於基本模式中的三個步驟的。如先前一樣,設t n 為乙個規模為n的問題的執行時間。如果問題的規模足夠地小,如n c c為乙個常量 則得到它的直接解的時間為常量,寫作 1 假設我們把原問題分解成a個子問題,每乙個的大小是原問題的1 b。對於合併排序,a和b都是...
使用遞迴實現霍納法則
例如,當x 3時,計算p x 2x 4 x 3 3x 2 x 5的值。對於多項式p x 2x 4 x 3 3x 2 x 5,我們按霍納法則進行變換,有 p x 2x 4 x 3 3x 2 x 5 x 2x 3 x 2 3x 1 5 x x 2x 2 x 3 1 5 x x x 2x 1 3 1 5 ...