【位操作筆記】位計數演算法 分治法統計 4 另外一個版本
位計數演算法 分治法統計 4 另外一個版本
位計數
位計數(Counting bits set),指的是計算一個數裡bit位置1的個數,例如一個8位數0xea = 0b1110 1010,位置1的個數為5。
演算法說明
該演算法是基於分治法(divide and conquer)的一個優化後的演算法版本,分治法是指以兩個相鄰的bit位為一組,將這兩個bit的數值相加,得到的結果放到大小為2bit的位段空間裡。然後再將相鄰的兩個2bit位段數值相加,得到的結果放到4bit的位段空間裡,以此類推,最終完成位計數。分治法可以參照位計數演算法 分治法統計和位計數演算法 分治法統計 優化版本。
位計數程式碼
32位數的位計數程式碼
unsigned int count(unsigned int x)
{
x = x - ((x >> 1) & 0x55555555); // reuse input as temporary
x = (x & 0x33333333) + ((x >> 2) & 0x33333333); // temp
x = (((x + (x >> 4)) & 0xF0F0F0F) * 0x1010101) >> 24; // count
return x;
}
演算法來源
Bit Twiddling Hacks By Sean Eron Anderson Counting bits set, in parallel
演算法計算過程
省略,原理相同,可以參照位計數演算法 分治法統計 優化版本。
位計數程式碼
[參考資料]
[Hacker’s Delight] 作者: Henry S. Warren Jr.
Bit Twiddling Hacks By Sean Eron Anderson
相關文章
- 演算法學習之路|個位數統計演算法
- 演算法設計--眾數和重數問題(分治法)演算法
- Java中的按位操作——Java程式設計思想筆記Java程式設計筆記
- L1-003 個位數統計 pythonPython
- 02_Python學習筆記之統計整數二進位制中1的個數Python筆記
- 【c語言】統計一個數二進位制中的1的個數C語言
- mysql基礎 依據一個欄位查詢另外一個欄位存在不同的值MySql
- 演算法隨筆——數位DP演算法
- 演算法導論-中位數和順序統計量演算法
- 計算機演算法設計與分析筆記(二)——遞迴與分治計算機演算法筆記遞迴
- 【演算法】GPLT - 基礎梯級練習題 - 個位數統計(15分)演算法
- 學習筆記:數位dp筆記
- 數位DP 學習筆記筆記
- 【學習筆記】數位DP筆記
- 移動一個帶有lob欄位的表到另外一個表空間的語法
- 數理統計筆記筆記
- 演算法學習筆記-暴力搜尋和分治法演算法筆記
- Oracle group by與case when統一單位後統計數量Oracle
- lua不同版本的位操作
- 統計位數為偶數的數字(C++)C++
- 一個五位數字ABCDE*4=EDCBA,這五個數字不重複,請程式設計求出來.程式設計
- 如何檢視solaris系統的版本和位數?solaris系統的版本和位數的檢視方法
- 斐波那契數列的分治法計算
- 關於系統許可權的設計-位操作
- Erlang學習筆記(七)二進位制型與位語法筆記
- 寫一個函式,輸入一個4位數字,要求輸出這4個數字字元函式字元
- .net框架筆記常數與欄位框架筆記
- 演算法筆記04--分治法之尋找最大最小元素演算法筆記
- Elasticsearch 統計某欄位有值的文件數Elasticsearch
- Dynamics CRM使用計算欄位自動計算兩個時間欄位的天數差
- 位運算--求一個 數二進位制中1的個數
- 輸入一個三位數,輸出它各個數位之和
- leedcode-位元位計數
- 十六進位制減法計算
- [案例] 字元型欄位統計資訊只對前32位進行統計字元
- L1-003 個位數統計 (15分)(chen-c語言)C語言
- offer通過--10二進位制中統計1的個數-2
- mysql 計算 一個文字欄位的內容一個文字出現的次數MySql