天天看點

快速求解一個數位數的和

naive的方法就是一位一位的統計了,但是通過一個為運算的技巧,我們可以快速的求解這個問題。

(1)不妨假設這個數不超過64位,利用下面代碼for循環裡面的計算,可以并行的求解8個位元組的位數和。

(2)接下來将val分布在8位元組的和加起來 注意這裡采用對半相加的辦法,非常巧妙.最後的結果一定儲存在最低位元組裡面。

(3) 經過測試這個比naive的辦法可能要快了一倍左右。

def count(x):
    val = 
    for i in range():
        val += x&
        x>>=
    val += val>>
    val += val>>
    val += val>>
    print(val&) 
           

繼續閱讀