数字之魅——小感小悟

求二进制中1的个数

查看网友评论有这样一句话:一个分支判断会耗上14个左右的时钟周期。
这里我就联想到了我看CSAPP中的几个知识点。

  • 现在CPU一般都是一条指令一个时钟周期
  • 普通线程之间的切换需要消耗20000个时钟周期,但是在现在cpu中基本都是超线程的,比如我笔记本是酷睿i5,2个实际内核,4个逻辑内核。也可以说是2房间4个门吧。在这种超线程的cpu中,线程切换只需要1个时钟周期。
    上面只是联想,网友想说明的问题是分支循环效率较低,能避免就避免。

对于解法五的查表法,提供了一种很好的思想,虽然被大牛给否决了,但是在处理小规模,或者多次查表的应用中不失为一种很好的方法,比如我的博客中整型转字符串的算法就是用的这种方法(http://blog.csdn.net/z702143700/article/details/46715893)。

下面是大牛的评论,大致意思精简如下,非常好。
对于这种小规模问题,CPU时钟周期和内存读取可能就比时间复杂度显得更加重要了。这里用到一个访存操作,且第一次访存的时候很有可能数组不在cache里,这样一个cache miss导致的后果就是耗去几十甚至上百个时钟周期,所以这里虽然时间复制度为O(1),但是性能是很差的。

对于时钟周期的概率可以参考(http://blog.csdn.net/z702143700/article/details/46278069
最后,最好的解法并不是书中提到的,所以感叹一句没有最好,只有更好。
更好的解法见博客(http://blog.csdn.net/justpub/article/details/2292823

不要被阶乘吓到

给我的启发是乘除的效率是较低的,移位运算需要我们经常拿来考虑。

  • 奇偶判断可以用来移位
    如: if(x>>1)或者if(x&1)
  • 整除2可以用移位
    如:x>>1 ==>> x / 2 x>>2 ==>> x / 4 ……

未完待续。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值