演算法學習三:使用霍納規則計算多項式
阿新 • • 發佈:2019-02-09
霍納規則中的演算法思想
在《演算法導論》第二章的思考題中,描述了利用霍納規則計算多項式的方法。以前自己在寫程式的時候都是傻傻的簡單粗暴地直接上了,看到這個演算法的時候眼前一亮,就多看了一些,果然要比直接計算要效率高很多。為了防止自己以後忘了這個高效的演算法,在此記錄一下。
簡介
據百度百科介紹,霍納規則用來簡化樸素多項式的求值,在中國叫秦九韶演算法。霍納規則是一種將一元n次多項式的求值問題轉化為n個一次式的演算法。其大大簡化了計算過程,即使在現代,利用計算機解決多項式的求值問題時,霍納規則依然是最優的演算法規則
。
直接迭代計算多項式
既然是最優的演算法規則,我們可以根據它的計算過程來分析為何它會簡化原來的計算過程。一般多項式的表示式如下:
最簡單直接的計算方法就是直接迭代計算相加,其虛擬碼如下:
sum=0
for k<---0 to n
sum<---sum+ak*x^k
對於每個k,假設計算機的計算冪的時候是採用元素多次相乘,則
即直接計算的時間複雜度為
霍納規則計算多項式
霍納規則採用的是最少乘法策略,它通過巧妙的結構分解,避免了一次次計算冪的過程,簡化了乘法計算數目,大大提高了計算效率。再次看一下多項式進行結構分解後的形式:
霍納規則的虛擬碼如下:
y<---0
for k<---n to 0
do y<---ak+x*y
此時,對於每個k,其計算的時間複雜度為2,則霍納規則計算多項式的總時間為:
即霍納規則計算多項式的時間複雜度為
顯然,
祝楓
2016年7月10日於深圳