在《演算法導論》第二章的思考題中,描述了利用霍納規則計算多項式的方法。以前自己在寫程式的時候都是傻傻的簡單粗暴地直接上了,看到這個演算法的時候眼前一亮,就多看了一些,果然要比直接計算要效率高很多。為了防止自己以後忘了這個高效的演算法,在此記錄一下。
。既然是最優的演算法規則,我們可以根據它的計算過程來分析為何它會簡化原來的計算過程。一般多項式的表示式如下: 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...