演算法筆記02--歸納法之多項式求值(Horner規則)
多項式求值
假設有n+2個實數a0,a1,...,an和x的序列,求多項式
p_nx = a_nx^n + a_n-1x^n-1 + ...+ a_1x + a_0;
則需要乘法:n+n-1 + ...+2+1 = n(n+1)/2
需要加法:n
可見演算法效率為O(n^2)
而p_nx = ((...((((a_n)x + a_n-1)x + a_n-2)x + a_n-3)....)x + a_1x) + a_0
因此思路:
p_0x = a_n
p_1x = xp_0x + a_n-1
p_2x = xp_2x + a_n-2
......
p_nx = xp_n-1x + a_0
時間複雜度:
令T(n)為n次項所需加法和乘法之和,這裡假設乘法為O(1)
T(1)= 1+1 = 2
T(2)= T(1)+ 1 +1 = T(1)+2
T(n)= T(n-1) + 1 +1 = T(n-1) + 2
因此 T(n)= T(1) + 2*(n-1) = 2*n = n +n即乘法n次,加法n次,時間複雜度O(n)
程式碼:
#include<iostream>
using namespace std;
int solve_px(int a[],int x, int n)
{
int px = a[0];
for(int i =1; i<n;i++)
{
px = px*x + a[i];
}
return px;
}
int main()
{
//px4 = 3*x^4+6*x^3+2*x^2+5*x+6
//px0 = 3(a[0])
//px1 = x*px0 + 6(a[1])
//px2 = x*px1 + 2(a[2])
//px3 = x*px2 + 5(a[3])
//px4 = x*px3 + 6(a[4])
int a[5] = {3,6,2,5,6};
int x = 2;
cout<<solve_px(a,x,5)<<endl;
return 1;
}
相關文章
- 演算法筆記03--歸納法之生成排列演算法筆記
- 演算法筆記01--歸納法之整數冪演算法筆記
- 筆記:隱式轉換規則筆記
- 正規表示式快速入門(歸納版)
- 市場購物籃分析(規則歸納/C5.0)+apriori
- 常用Markdown語法歸納
- html標記歸納HTML
- 從“數學歸納法”到理解“遞迴演算法”!遞迴演算法
- Dijkstra演算法的思想和數學歸納法演算法
- SG學習筆記之RMAN簡單歸納筆記
- JavaScript識別符號命名規則總結和保留字歸納JavaScript符號
- MySQL鎖使用的基本原則歸納MySql
- 【組合數學】組合數學簡介 ( 組合思想 2 : 數學歸納法 | 數學歸納法推廣 | 多重歸納思想 )
- 正規表示式學習筆記(1)-認識正則筆記
- SAP常用系統函式歸納函式
- 霍納規則(C/C++,Scheme)C++Scheme
- 預測演算法之多元線性迴歸演算法
- 演算法手記(2)Dijkstra雙棧算術表示式求值演算法演算法
- 正規表示式(筆記)筆記
- 工具歸納
- 手擼機器學習演算法 - 多項式迴歸機器學習演算法
- HTML基本語法和語義寫法規則與例項HTML
- 學習筆記歸納 2010-9-5.10-17筆記
- Golang正則筆記 :使用正規表示式處理題庫文字Golang筆記
- 字尾表示式的求值的演算法演算法
- Java學習筆記之多型Java筆記多型
- 微軟程式歸納新技術:元程式歸納微軟
- 函式正規化入門(惰性求值與函式式狀態)函式
- 正規表示式速查筆記筆記
- 正規表示式筆記(四)筆記
- 正規表示式筆記(三)筆記
- 正規表示式筆記(二)筆記
- 正規表示式筆記(一)筆記
- 多項式學習筆記筆記
- Kotlin知識歸納(一) —— 基礎語法Kotlin
- HexMap學習筆記(四)——不規則化筆記
- (原)庫存批量規則=讀書筆記筆記
- 一種簡易的表示式求值演算法演算法