高效求解一個2的N次方冪的算法


高效求解一個2的N次方冪的算法

解法:時間復雜度在O(log N),其中log N的下標可以是k=2,3,4......(例如logN),但是它們統稱為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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM