【编程之美】求二进制数中1的个数
来源:互联网 发布:手机恶意软件排行 编辑:程序博客网 时间:2024/04/30 12:03
题目:对于一个字节的无符号整型变量,求其二进制表示中“1”的个数,要求算法的执行效率尽可能高。
题目很简单,一般人都可以用最直接的方法求解出来,通过求余和模除运算。对二进制操作过程中,除以一个2,原来的数就会少一个0,如果除过程中余1,则表示当前位置有一个1,计数值加1,代码很简单。但从执行效率来看,这个代码其实也不会很复杂,但有更加简单的方法,作为一个程序员就不应该放弃。我们知道要提高程序的时间运行效率,典型的方法就是以空间换时间。对8位的二进制数,总共的可能输入也只有256个,如果要想得到最优的时间复杂度,只需要把这256个二进制数对应的“1”的个数存入一个数组中,然后直接从这个数组中取就行了。算法的时间复杂度仅为O(1)。但是这个方法对于位数多的二进制数显然不可取。
将算法的时间复杂度降到O(M),其中M是该二进制数的“1”的个数,这样的时间复杂度应该已经是最优的了。我们知道在判断一个二进制数中只有一个“1”的时候,通过判断这个数是否是2的整数次幂得到。例如01000000,如果要得到0,可以和00111111进行与操作。事实上,进行的是01000000&(01000000-00000001)=01000000&00111111=0,所以可以得到下列代码:
int Count(BYTE v){
int num=0;
while(v){
v&=(v-1);
num++;
}
returnnum;
}
这个解法对二进制位数多少都是具有很大的时间优势的。
- 编程之美---求二进制数中1的个数
- 《编程之美》:求二进制数中1的个数
- 【编程之美】求二进制数中1的个数
- 【编程之美】求二进制数中1的个数
- 编程之美---求二进制数中1的个数
- 编程之美---求二进制数中1的个数
- 《编程之美》 求二进制数中1的个数
- 读书笔记之编程之美 - 2.1 求二进制数中1的个数
- 面试题之编程之美 求一个整数中二进制数1的个数
- 编程之美: 第二章 数字之魅 2.1求二进制数中1的个数
- 编程之美--笔记--数字之魅--求二进制数中1的个数
- 编程之美之求二进制中1的个数
- 编程之美 2.1 求一个数的二进制表示中1的个数
- 《编程之美》读书笔记——“求二进制数中1的个数”
- 《编程之美》读书笔记(二):“求二进制数中1的个数”扩展问题
- 2.1《编程之美》读书笔记——“求二进制数中1的个数”
- 求二进制数中1的个数——《编程之美》
- 编程之美 2.1求二进制数中1的个数
- 51最小系统图
- Farey序列与Stern-Brocot树
- D_backup and restore(物理与逻辑备份)与重建
- PowerDesigner导出表到word
- 九度OJ 1018 统计同成绩学生人数
- 【编程之美】求二进制数中1的个数
- 《大数据》笔记 TF.IDF
- 手机客户端功能概要
- 编程中一些比较容易出错的地方
- hdu 4556 Stern-Brocot
- 金山西山居初赛第四场
- 为什么一个java源文件中只能有一个public类
- 深入了解php底层机制
- 网络编程概述