高效求解一個2的N次方冪的算法
解法:時間復雜度在O(log N),其中log N的下標可以是k=2,3,4......(例如logk N),但是它們統稱為O(log N)。
思路?
我們可以將2的N次方冪的指數N從1每次以兩倍(三倍、四倍.....,但是它們的執行次數都是logkN)的速度往上遞增到N,這樣我們的時間復雜度會遠遠降低,就能高效的求解2的N次方冪。
例如我們以二為例:
解法?
方法(遞歸形式):
def erdeNcifangmi(a): b=1 sum=2 if a==1: //若a==1時,則返回2 return sum
if a==0: //若a==0,則返回1
return 1 while (b<<1)<=a: //表示b<<1(即b*2)小於a sum*=sum //看上述圖解可知 b=b<<1 if (b<<1)>a: //若我們輸入的a不是二的整數倍,而我們寫的算法不能讓b變為log2a。則需要將我們剩余的指數表示出來(a-b),之后再進入遞歸進行計算之后的得出結果。 sum1=sum return sum1*erdeNcifangmi(a-b) c=int(input()) num=erdeNcifangmi(c) print(num)