[演算法] 指數運算 (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)