ZT CSDN 如何以最快的速度计算出一个二进制数中1的个数? [
一道算法面试题:如何以最快的速度计算出一个二进制数中1的个数? [问题点数:10分,结帖人weicai_chen]
|
楼主 发表于: 2007-06-26 22:51:44
|
|
#1 回复于: 这个不是前一段那个101个面试题中的一题吗。 计算整数number的比特位值为1的位数 int getBits(int number) for( ; number; number &= number - 1) |
|
|
|
#2 回复于: 有个不用循环的算法,不过看不太懂 |
|
|
|
#3 回复于: 做个映射数组行不,以字节值为key,value就是对应的1的个数。然后就能8位8位的去统计了。 |
|
|
|
#4 回复于: unsigned int |
|
#5 回复于: 不用循环,可能吗? |
|
#6 回复于: http://www.everything2.com/index.pl?node_id=1181258 |
|
#7 回复于: 哪位高手解释一下上面两个算法? |
|
#8 回复于: 好题,mark |
3
|
#9 回复于: 关键是:number &= (number - 1) 讨论之。 1):number 为奇数,则number &= (number - 1)萃取末尾1,并将结果赋给number。计数器显然要加1。 详见《高效程序的奥秘》。 |
|
#10 回复于: mark |
|
#11 回复于: M |
|
#12 回复于: mark |
|
#13 回复于: mark一下 |
|
#14 回复于: mark |
3
2
|
#15 回复于: 高效程序的奥秘里提到过... |
|
#16 回复于: 但是他那个数可能是100位啊?int能装的下吗? |
|
#17 回复于: 按4字节分组啊。 |
|
#18 回复于: 把它当作字符串来处理吗? |
|
#19 回复于: number &= (number - 1 |
|
#20 回复于: 快速将所有的1都置零,NB |
|
#21 回复于: 我前不久查阅了 Intel 的技术资料,Intel SSE4 新增了“POPCNT”指令, |
|
#22 回复于: 俺做ARM的. |
|
#23 回复于: 我也写ARM程序(并用DSP)。 |
|
#24 回复于: 我暂时不用DSP |
|
#25 回复于: int GetBits(int number) for(; number >0; number/=2) return retval; |
4
5
6
|
#26 回复于: fire_woods 的方法很好,说细的算法说明可以参看《Hacker's Delight》(中文书名《高效程序的奥秘》)里面有讲解。 |
|
#27 回复于: int getBits(int number) for( ; number; number &= number - 1) //////////////////////// 如果内存宽裕,可以造表,呵呵,我是tablelover, |
|
#28 回复于: fire_woods(风林火山)的算法不错,两两合并求1的个数的和,虽然32位上优势不大,如果是64位的话就比移位快很多了。比查表省地方多了。 |
|
#29 回复于: MARK,学到不少东西,呵呵。 |
|
#30 回复于: 比较经典的问题了 |
|
#31 回复于: 问一下具体的实现,现在我知道了32bit的好方法: const int MASK1 = 0x55555555; n = (n & MASK1) + ((n >> 1) & MASK1); cout << n << " number of 1." << endl; 但是对于长度是1000万的0/1输入,如何实现呢? |
|
#33 回复于: 1000万的0/1输入 个人认为就速度而言造表法最快,不过如果是嵌入式开发两两合并求1的算法最优,关键是能够拓展思路 |
|
#34 回复于: 1000万个0/1输入,每个0/1占一个字节? |
|
#35 回复于: 直接相加就够了。 |
|
#36 回复于: 看来我是没明白原题的意思,该算法的输入是什么呢? |
|
#37 回复于: 按Byte查表, 不只一个字节就循环 |
|
#38 回复于: mark~ |
|
#39 回复于: 把0替换掉,剩下的长度不就是1的个数么? |
|
#40 回复于: 咋和低位的没啥区别 都是循环移位的?? |
|
#41 回复于: 学习一下 |
|
#42 回复于: 我来挺挺!!!!!!!!!!1我来挺挺!!!!!!!!!!1 |
ZT CSDN 如何以最快的速度计算出一个二进制数中1的个数? [的更多相关文章
- shell脚本就是由Shell命令组成的执行文件,将一些命令整合到一个文件中,进行处理业务逻辑,脚本不用编译即可运行。它通过解释器解释运行,所以速度相对来说比较慢。
shell脚本?在说什么是shell脚本之前,先说说什么是shell. shell是外壳的意思,就是操作系统的外壳.我们可以通过shell命令来操作和控制操作系统,比如Linux中的Shell命令就包 ...
- 从网卡发送数据再谈TCP/IP协议—网络传输速度计算-网卡构造
在<在深谈TCP/IP三步握手&四步挥手原理及衍生问题—长文解剖IP>里面提到 单个TCP包每次打包1448字节的数据进行发送(以太网Ethernet最大的数据帧是1518字节,以 ...
- ZT 计算一个无符整数中1Bit的个数(1) 2010-04-20 10:52:48
计算一个无符整数中1Bit的个数(1) 2010-04-20 10:52:48 分类: C/C++ [转]计算一个无符整数中1Bit的个数(1) Count the number of bits ...
- STM32定时器输出PWM频率和步进电机控制速度计算
1.STM32F4系列定时器输出PWM频率计算 第一步,了解定时器的时钟多少: 我们知道AHP总线是168Mhz的频率,而APB1和APB2都是挂在AHP总线上的. (1)高级定时器timer1, t ...
- [AI开发]目标跟踪之速度计算
基于视频结构化的应用中,目标在经过跟踪算法后,会得到一个唯一标识和它对应的运动轨迹,利用这两个数据我们可以做一些后续工作:测速(交通类应用场景).计数(交通类应用场景.安防类应用场景)以及行为检测(交 ...
- 你的以太网速度足够快吗?四种更快的速度正在路上······
以太网的未来将远远超越下一个最快速度:为无处不在的网络协议绘制路径的网络project师们正在寻找新版本号来服务于各种应用程序. 在上周六的以太网联盟(一个行业组织,用于促进IEEE以太网标准)会议上 ...
- 更快的速度、更好的服务——易普优APS云排程
众所周知软件执行效率受制于硬件性能,市面上的APS产品多为单机版本,企业要应用好APS,保证紧急插单.计划下发全程无忧,用户电脑硬件性能是不容忽视的一大瓶颈.APS的直接用户是车间管理人员.计划员,而 ...
- 阿里云openssl升级,实现nginx主动推送,nginx主动推送能够有效减少不必要的报文传输,减少用户请求次数,以达到更快访问速度
现有版本检查 [root@node3 ~]# openssl version #这个版本是无法支持http2.0主动推送功能.需要升级为2019版本. OpenSSL 1. ...
- 在MS SQLSERVER中如何最快的速度清空所有用户表的数据
有时候我们需要清空数据库中所有用户表的数据,如果一张表一张表的清空的话,遇到一个庞大的数据系统估计得崩溃了. 用游标加上用变量来引用表名就可以做到这一点. 用变量来引用表名对表操作可以用在存储过程中 ...
随机推荐
- LVS负载均衡DR模式部署
目录: 1. 拓扑图 2. 搭建环境 3. LVS服务器部署 4. 测试 1. 拓扑图 LVS-DR模式采的IP地址全部为外网IP. 本例中IP的设置全部采用临时设置IP的方式,重启后会 ...
- [HNOI 2018]寻宝游戏
Description 题库链接 给出 \(n\) 个 \(m\) 位的二进制数,在每一个二进制数间插入一个 & 或 | ,第 \(0\) 个数为 \(0\) , \(0,1\) 间也要插入符 ...
- api.closeFrame
关闭frame closeFrame({params}) params name: 类型:字符串 默认值:无 描述:(可选项)frame 名字,不传时关闭当前 frame 示例代码 api.close ...
- asp.net MVC中form提交和控制器接受form提交过来的数据
1.cshtml页面form提交2.控制器处理表单提交数据4种方式方法1:使用传统的Request请求取值[HttpPost]public ActionResult AddNews(){ str ...
- mysql根据经纬度求两地距离
#1.两点距离(1.4142135623730951) ,),point(,)); select st_distance(point (120.10591, 30.30163),point(120.1 ...
- AutoFac使用方法总结二:事件与依赖循环
事件 AutoFac支持三种事件:OnActivating,OnActivated,OnRelease.OnActivating在注册组件使用之前会被调用,此时可以替换实现类或者进行一些其他 ...
- Python标准模块--concurrent.futures 进程池线程池终极用法
concurrent.futures 这个模块是异步调用的机制concurrent.futures 提交任务都是用submitfor + submit 多个任务的提交shutdown 是等效于Pool ...
- 算警示吧——此文来自张鑫旭(说说CSS学习中的瓶颈)
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=2523 虽已数年,但未 ...
- Ajax 的几种方法应用
一,js实现ajax异步请求,简单例子 try.jsp <%@ page language="java" import="java.util.*" pag ...
- Atitit.播放系统的选片服务器,包厢记时系统 的说明,教程,维护,故障排查手册p825
Atitit.播放系统的选片服务器,包厢记时系统 的说明,教程,维护,故障排查手册p825 1. 播放系统服务器方面的维护2 1.1. 默认情况下,已经在系统的启动目录下增加了俩个启动项目2 1.2. ...
收藏