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