演算法學習三 使用霍納規則計算多項式

2021-07-14 16:40:57 字數 1295 閱讀 4993

在《演算法導論》第二章的思考題中,描述了利用霍納規則計算多項式的方法。以前自己在寫程式的時候都是傻傻的簡單粗暴地直接上了,看到這個演算法的時候眼前一亮,就多看了一些,果然要比直接計算要效率高很多。為了防止自己以後忘了這個高效的演算法,在此記錄一下。

。既然是最優的演算法規則,我們可以根據它的計算過程來分析為何它會簡化原來的計算過程。一般多項式的表示式如下: p(

n)=∑

k=0n

akxk

=a0+

x(a1

+x(a

2+..

.+x(

an−1

+xan

)))

最簡單直接的計算方法就是直接迭代計算相加,其偽**如下:

sum=0

for k<---0 to n

sum<---sum+ak*x^k

對於每個k,假設計算機的計算冪的時候是採用元素多次相乘,則su

m+ak

xk的計算複雜度為k+

2 (假設加法和乘法指令的時間一樣,下同),總的計算時間為 t(

n)=c

1n+c

2(2+

3+..

.+(n

+2))

=c1n

+c2n

(n+4

)2即直接計算的時間複雜度為θ(

n2) 。

霍納規則採用的是最少乘法策略,它通過巧妙的結構分解,避免了一次次計算冪的過程,簡化了乘法計算數目,大大提高了計算效率。再次看一下多項式進行結構分解後的形式: p(

n)=∑

k=0n

akxk

=a0+

x(a1

+x(a

2+..

.+x(

an−1

+xan

)))

霍納規則的偽**如下:

y

<---0

for k<---n to 0

do y<---ak+x*y

此時,對於每個k,其計算的時間複雜度為2,則霍納規則計算多項式的總時間為: t(

n)=c

1n+c

2×2×

n=(c

1+2c

2)n

即霍納規則計算多項式的時間複雜度為θ(

n)。顯然,θ(

n)要遠遠優於θ(

n2) 。雖然這只是乙個小小的例子,但足以體現出演算法思想的力量,以後再寫程式決不能蒙著腦袋上去就寫了,還真是要好好琢磨一下呢。

祝楓 2023年7月10日於深圳

演算法學習(三)

快慢指標 雙指標 兩個指標指向不同元素,從而協同完成任務,主要用於遍歷元素。對撞指標,快慢指標,滑動視窗 對撞指標是指在陣列中,將指向最左側的索引定義為左指標,最右側的定義為右指標,然後從兩頭向中間進行陣列遍歷。leetcode 167 兩數之和 ii 輸入有序陣列 給定乙個已按照 公升序排列 的整...

EM演算法學習 三

在前兩篇文章中,我們已經大致的講述了關於em演算法的一些基本理論和一些基本的性質,以及針對em演算法的缺點進行的優化改進的新型em演算法,研究之後大致就能夠進行初步的了解.現在在這最後一篇文章,我想對em演算法的應用進行一些描述 em演算法在多元正態分佈缺失的資料下一般都是有較為廣泛的應用,所以在這...

Apriori演算法學習筆記 三

apriori演算法的python實現from future import print function import pandas as pd 頻繁規則的產生 用於實現l 到c k的連線 deffind freq set x,ms x list map lambda i sorted i.spli...