【位操作筆記】位計數演算法 分治法統計 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
相關文章
- 1021. 個位數統計 (15)
- 【PAT乙級】1021 個位數統計
- L1-003 個位數統計 pythonPython
- 02_Python學習筆記之統計整數二進位制中1的個數Python筆記
- PAT-B 1021 個位數統計【對映】
- mysql基礎 依據一個欄位查詢另外一個欄位存在不同的值MySql
- 演算法隨筆——數位DP演算法
- 【演算法】GPLT - 基礎梯級練習題 - 個位數統計(15分)演算法
- 計算機演算法設計與分析筆記(二)——遞迴與分治計算機演算法筆記遞迴
- 分治與遞迴-找k個臨近中位數的數遞迴
- 數位DP 學習筆記筆記
- 學習筆記:數位dp筆記
- 【學習筆記】數位DP筆記
- 1295 統計位數為偶數的數字
- 數理統計筆記筆記
- Oracle group by與case when統一單位後統計數量Oracle
- 演算法學習筆記-暴力搜尋和分治法演算法筆記
- 統計位數為偶數的數字(C++)C++
- 數位電路之CPU設計一
- 大一下 計算系統基礎筆記:原碼的一位乘法 20240402筆記
- #數位DP 計數問題
- leetcode 338 位元位計數LeetCode
- leedcode-位元位計數
- 關於系統許可權的設計-位操作
- 如何檢視solaris系統的版本和位數?solaris系統的版本和位數的檢視方法
- 十六進位制減法計算
- Dynamics CRM使用計算欄位自動計算兩個時間欄位的天數差
- Elasticsearch 統計某欄位有值的文件數Elasticsearch
- java統計實體類中空欄位數量Java
- 82. 落單的數 ( 位運算-統計 )
- 寫一個函式,輸入一個4位數字,要求輸出這4個數字字元函式字元
- 輸入一個三位數,輸出它各個數位之和
- offer通過--10二進位制中統計1的個數-2
- L1-003 個位數統計 (15分)(chen-c語言)C語言
- 學習筆記 詳解一種高效位反轉演算法筆記演算法
- 尤拉計劃725:數位之和數
- mysql 計算 一個文字欄位的內容一個文字出現的次數MySql
- SQL 如何計算每個分組的中位數SQL