Horner法則(秦九韶演算法 )的程式實現
阿新 • • 發佈:2019-02-20
注:《資料結構與演算法分析——C》習題2.10 學習筆記
(另外大家在使用csdn時一定要注意 有時候寫新文章時會顯示最近編輯的一篇文章,如果此時沒有點“寫新文章”那麼在發表後會覆蓋之前儲存的文章=。= 大家也都知道 覆蓋比刪除更徹底 ,所以大家在使用的時候一定要注意這點。。。)
知識預習
原題描述
2.10 考慮下述演算法(稱為Horner法則)。計算
Poly = 0;
for(i = N; i >= 0; i--)
Poly = X * Poly + A[i]
a. 對X = 3,
b.解釋該演算法為什麼能夠解決這個問題。
c.該演算法的執行時間是多少?
分析過程
按照其思路我們
class test{
public static long poly2(int[] arr, int x, int n){
//arr儲存係數, x 表示基數, n 表示冪
long poly = 0;
for(int i = n; i >= 0; i--)
poly = poly * x + arr[i];
return poly;
}
public static void main(String[] args) {
int[]b = {2 ,1,0,8,4};
System.out.println(poly2(b,3,4));
}
}
上圖是用Java語言寫了一下 ,首先我們按照法則把這個公式分解開
是這樣的,那麼我們在單步除錯上面程式的時候發現程式也確實是按照這個來計算的,但是有一點需要注意那就是係數陣列的順序
它的正序或者倒序取決於for迴圈是如何編寫的,例如下面的程式我們就可以正序書寫係數陣列
class test{
public static long poly2(int[] arr, int x, int n){
//arr儲存係數, x 表示基數, n 表示冪
long poly = 0;
for(int i = 0; i <= n; i++)
poly = poly * x + arr[i];
return poly;
}
public static void main(String[] args) {
int[]b = {4,8,0,1,2};
System.out.println(poly2(b,3,4));
}
}
效率以及意義
效率
對於一個
而使用秦九韶演算法時,至多隻需作
意義
該演算法看似簡單,其最大的意義在於將求n次多項式的值轉化為求n個一次多項式的值。在人工計算時,利用秦九韶演算法和其中的係數表可以大幅簡化運算;對於計算機程式演算法而言,加法比乘法的計算效率要高很多,因此該演算法仍有極大的意義,用於減少CPU運算時間。