[演算法] 指數運算 (Exponentiation)
現在很多程式語言內建就有包括指數運算的函式或運算子了,但如果今天你想要做的是矩陣的指數運算或著說程式內建函式庫沒有指數運算那該怎麼辦呢?
#python程式碼
def power(b, n):
ans = 1
for i in range(n):
ans = ans * b
return ans
不過問題是這樣程式執行起來很沒有效率,時間複雜度為O(n)。-----------------------------------------------------------
假設我要算 b8, 與其讓b自乘以8次,我可以改用以下步驟來求得
- b2 = b · b
- b4 = b2 · b2
- b8 = b4 · b4
把 bn 的定義廣義化:
- 如果 n 等於 0: b0 = 1
- 如果 n 是偶數: bn = (bn/2)2
- 如果 n 是奇數: bn = b · bn-1
#python程式碼
def fast_power(b, n):
if(n==0):
return 1
else:
if(n%2==0):
pow_half = fast_power(b, n/2)
return pow_half * pow_half
else:
return b * fast_power(b, n-1)
時間複雜度為(logn)
參考資料
- Structure and Interpretation of Computer Programs (SICP)
0 意見 :
張貼留言