求冪運算 多項式乘法及Horner法則的應用

2022-03-18 10:54:43 字數 1552 閱讀 3084

一,兩種不同的求冪運算

求解x^n(x 的 n 次方)

①使用遞迴,**如下:

1

private

static

long pow(int x, int

n)

分析:每次遞迴,使得問題的規模減半。2到6行操作的複雜度為o(1),第7行pow函式裡面的x*x操作複雜度為o(1)

故時間複雜度公式:t(n)=t(n/2)+o(1)   =>   t(n)=o(logn)

②普通方式求冪

1

private

static

long pow2(int x, int

n)

顯然,時間複雜度為o(n)

二,求解多項式乘法

公式:f(x,n) = a(0)x^0 + a(1)x^1 + a(2)x^2+...+a(n)x^n

比如:f(10,4)=a(0)10^0 + a(1)10^1 + a(2)10^2 + a(3)10^3+a(4)10^4

**如下:

1

public

static

long poly(int arr, int x, intn)6

return

sum;7}

89private

static

long pow(int x, int

n)

horner法則求解多項式乘法,參考:

1

public

static

long poly2(int arr, int x, int

n)

對比採用horner法則計算多項式乘法與這篇文章: 字串轉換成數字

1

public

int atoi(char

s)

可以看出,二者有很大的相似性。其實,不難看出,字串轉換成數字使用的正是horner法則。

由此,得到啟發,在進製轉換中,如:八進位制轉十進位制,相當於 x = 8。

故可寫出乙個常用的進製轉換程式,如下:

//

x 表示進製, 若x=8,表示將8進製轉換成10進製

public

static

long convert(char arr, int

x)

//str 表示原來進製的數,如:convert("456", 8) 456 --> 302

public

static

long convert2(string str, int

x)

十六進製制轉十進位制,相當於 x = 16。

public

static

long convert2(string str, int x)

return

result;

}

因此,進製轉換、字串轉換成數字、多項式求值都可以使用horner法則來求解。

多項式的冪運算

在寫 過程中發現字元陣列轉字串用.tostring 方法會亂碼,可以用string.valueof argsp 或者用array.tostring args 冪的運算時由於用的是string會出現空間浪費現象,可以用stringbuffer類替換,但是由於計算量不大,所以就沒有改了 package ...

多項式乘法

時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld et reo 吃完了元宵,又開始思考數學問題了。這次他拿了兩個多項式 p mathscrp 和 q mathscrq 他知道這兩個多項式的乘積也是乙個多項式,但他不...

多項式乘法

l1和l2是兩個帶頭結點的單鏈表表示的多項式,編寫演算法計算兩個多項式的乘積,運算結果仍用單鏈表進行儲存 include using namespace std typedef struct lnode lnode,linkedlist 查詢計算結果應該插入的位置 param l 鍊錶的頭結點指標 ...