資料結構與演算法 多項式

2022-01-28 22:22:53 字數 1956 閱讀 4776

在《演算法設計技巧與分析》5.5節介紹了多項式求值的巢狀乘法,也稱作horner規則,即pn(x)=anxn+an-1xn-1+...+a1x+a0=((...(((anx+an-1)x+an-2)x+an-3)...)x+a1)x+a0。這個是很容易就實現的。這裡要求次數是連續的並且大於等於0。

如果定義多項式的資料結構poly.h如下,

1 #ifndef poly_h_

2#define poly_h_

34 #include

5 #include

6 #include

7using

namespace std;89

class poly

10 16 poly(const poly& a)

17

21void outputpoly()

22

33 };

3435

#endif

並且實現了多項式加法和乘法,如下

1 #include "

poly.h"2

3void polyadd(poly& c,poly& a,poly& b);

4void polymul(poly& c,poly& a,poly& b);56

int main()

7 ;10 a.powr=;

11 poly b;

12 b.coef=;

13 b.powr=;

14 poly c;

15 polyadd(c,a,b);

16 poly d;

17 polymul(d,a,b);

18 cout << "a:"

<< endl;

19 a.outputpoly();

20 cout << "b:"

<< endl;

21 b.outputpoly();

22 cout << "

c=a+b:

"<< endl;

23 c.outputpoly();

24 cout << "

d=a*b:

"<< endl;

25 d.outputpoly();

26return

0;27 }

2829

void polyadd(poly& a, poly& b)

30 35

36void polyadd(poly& c,poly& a,poly& b)

37 46

47 c.coef.clear();

48 c.powr.clear();

4950

//poly c;

51for(i=0,j=0;i52

60else

if(a.powr[i]61

66else

67

72 }

73if(i==m && j74

80 }

81else

if(i82

88 }

89//

return c;

90 }

9192

void polymul(poly& c,poly& a,poly& b)

93 108 }

109110

for(i=0;i111

114 }

那麼該怎麼來實現多項式求值呢?

比較直接的是將它擴充套件成次數連續且是大於等於0的多項式,然後求值,可以直接使用巢狀乘法嗎?

下面的鏈結中,對巢狀乘法和直接計算求多項式的值進行比較,結果很有意思,可以關注下。

資料結構與演算法 多項式ADT

陣列實現宣告 typedef struct polynomial 初始化為0 void zeropolynomial polynomial poly 相加 void addpolynomial const polynomial poly1,const polynomial poly2,polynom...

資料結構之多項式(C )

資料結構多項式,運用到類的複製建構函式,靜態成員等基礎知識,簡單實現了加法和乘法運算,但是對乘法 複雜度比較高 暫時做這樣處理。對於多項式的構成這些不做多餘介紹。本 純手工製作,難免有不足之處。標頭檔案 polynomial h ifndef polynomial h define polynomi...

資料結構實驗,多項式類

多項式類標頭檔案 2013.5.24 該檔案定義乙個polynomial 多項式 類 類中使用帶頭節點的鏈式佇列儲存多項式資訊 每個節點的c表示多項式每一項的係數 頭結點的c表示項數 e表示每一項的指數 輸入資料格式以下為例 3.1x8 11x9 2x 7 9x 9x 3x 6x 3 x 4.4x2...