社区
数据结构与算法
帖子详情
一道算法面试题:如何以最快的速度计算出一个二进制数中1的个数?
weicai_chen
2007-06-26 10:51:44
加精
如何以最快的速度计算出一个二进制数中1的个数?假设这个二进制数位数可以很长,比如有100位以上或更多。。。
大家说说自己的想法。
...全文
2867
42
打赏
收藏
一道算法面试题:如何以最快的速度计算出一个二进制数中1的个数?
如何以最快的速度计算出一个二进制数中1的个数?假设这个二进制数位数可以很长,比如有100位以上或更多。。。 大家说说自己的想法。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
42 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
const_golenet
2010-09-28
打赏
举报
回复
我来挺挺!!!!!!!!!!1我来挺挺!!!!!!!!!!1
ccm_0
2010-09-23
打赏
举报
回复
学习一下
hehehengha1
2009-10-10
打赏
举报
回复
咋和低位的没啥区别 都是循环移位的??
高手给个意见罗
「已注销」
2007-08-26
打赏
举报
回复
把0替换掉,剩下的长度不就是1的个数么?
DLMU_net
2007-08-22
打赏
举报
回复
mark~
ahjoe
2007-08-19
打赏
举报
回复
按Byte查表, 不只一个字节就循环
NowCan
2007-08-16
打赏
举报
回复
直接相加就够了。
NowCan
2007-08-16
打赏
举报
回复
1000万个0/1输入,每个0/1占一个字节?
==
是啊我也糊涂了,如果这样的话,直接扫描一遍就很快了。
trueytht
2007-08-16
打赏
举报
回复
看来我是没明白原题的意思,该算法的输入是什么呢?
jiangbin00cn
2007-08-15
打赏
举报
回复
1000万的0/1输入
//////////////////////////
这里不明白,计算机内部数据都是以字节为单位的,1000万个0/1输入,每个0/1占一个字节?这样的话是你之前处理的问题,而不是这个算法的问题
个人认为就速度而言造表法最快,不过如果是嵌入式开发两两合并求1的算法最优,关键是能够拓展思路
trueytht
2007-08-13
打赏
举报
回复
问一下具体的实现,现在我知道了32bit的好方法:
void find32One(int n) {
const int MASK1 = 0x55555555;
const int MASK2 = 0x33333333;
const int MASK4 = 0x0f0f0f0f;
const int MASK8 = 0x00ff00ff;
const int MASK16 = 0x0000ffff;
n = (n & MASK1) + ((n >> 1) & MASK1);
n = (n & MASK2) + ((n >> 2) & MASK2);
n = (n & MASK4) + ((n >> 4) & MASK4);
n = (n & MASK8) + ((n >> 8) & MASK8);
n = (n & MASK16) + ((n >> 16) & MASK16);
cout << n << " number of 1." << endl;
}
但是对于长度是1000万的0/1输入,如何实现呢?
如果用string来存储每一个32bit,那效率是不是太低了?
要不然如何去实现呢?所以我觉得这个算法的主要开销在前面,
而不是32bit的.既然主要开销在前面,那应该集中去处理
前面的部分,32bit这里用移位或者n &= (n-1) 就行了.
大家都怎么实现把长串分割的呢?
sankt
2007-07-26
打赏
举报
回复
比较经典的问题了
krfstudio
2007-07-26
打赏
举报
回复
MARK,学到不少东西,呵呵。
whycadi
2007-07-25
打赏
举报
回复
fire_woods(风林火山)的算法不错,两两合并求1的个数的和,虽然32位上优势不大,如果是64位的话就比移位快很多了。比查表省地方多了。
火龙果被占用了
2007-07-24
打赏
举报
回复
fire_woods 的方法很好,说细的算法说明可以参看《Hacker's Delight》(中文书名《高效程序的奥秘》)里面有讲解。
settingsun86
2007-07-24
打赏
举报
回复
int GetBits(int number)
{
int retval = 0;
for(; number >0; number/=2)
{
if((number % 2) == 1)
retval ++;
}
return retval;
}
jiangbin00cn
2007-07-24
打赏
举报
回复
int getBits(int number)
{
int retval = 0;
for( ; number; number &= number - 1)
retval++;
return retval;
}
////////////////////////
mark
如果内存宽裕,可以造表,呵呵,我是tablelover,
高效,异读,就是浪费内存。
SoftBomb
2007-07-23
打赏
举报
回复
快速将所有的1都置零,NB
zhuying1983
2007-07-23
打赏
举报
回复
number &= (number - 1
好方法 ,佩服佩服
fire_woods
2007-07-23
打赏
举报
回复
我暂时不用DSP
加载更多回复(21)
ZT CSDN 如何以
最快
的
速度
计算
出
一个
二进制
数中
1的
个数
? [
一道
算法
面试题
:如何以
最快
的
速度
计算
出
一个
二进制
数中
1的
个数
? [问题点数:10分,结帖人weicai_chen] 收藏 weicai_chenweicai_chen等级:结帖率:95.12% 楼主 发表于: 2007-06-26 22:51:44 ...
如何以
最快
的
速度
计算
出
一个
二进制
数中
1的
个数
题目:如何以
最快
的
速度
计算
出
一个
二进制
数中
1的
个数
重点在于,这里有十亿或万亿个int数字,怎样做才能优化
算法
呢?解答:统计
一个
字节序列中1的
个数
,我首先想到的是最简单,把这
个数
每次右移一位,然后与0x01...
求
二进制
数中
1的
个数
任意给定
一个
32位无符号整数n,求n的
二进制
表示中1的
个数
,比如n = 5(0101)时,返回2,n = 15(1111)时,返回4。 这也是
一道
比较经典的题目了,相信不少人面试的时候可能遇到过这道题吧,下面介绍了几种方法来实现这...
算法
-求
二进制
数中
1的
个数
算法
-求
二进制
数中
1的
个数
问题描述 任意给定
一个
32位无符号整数n,求n的
二进制
表示中1的
个数
,比如n = 5(0101)时,返回2,n = 15(1111)时,返回4 这也是
一道
比较经典的题目了,相信不少人面试的时候...
计算
十进制数转化为2进制数之后中1的
个数
方法有很多,大致记两个 ...任意给定
一个
32位无符号整数n,求n的
二进制
表示中1的
个数
,比如n = 5(0101)时,返回2,n = 15(1111)时,返回4 这也是
一道
比较经典的题目了,相信不少人面试的时候可能遇到过这道
数据结构与算法
33,006
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章