数字之魅——小感小悟

求二进制中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 ……

未完待续。。。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-11 09:58:09

数字之魅——小感小悟的相关文章

测试小感1

本人自从事测试以来已经3个多星期了,一直都是在手动的进行功能测试,在测试的过程中发现很多问题,但做为一名新入职的实习生也不好说什么,毕竟自己还没真正对这个多年组合起来的开发团队模式进行深入的了解过,看到的也可能只是一些表象的东西. 1:测试分工不明确. 2:开发过程对于测试和产品人员来说不透明. 3:需求变更快,但变更后信息传达却比较慢,只有提出需求变更和修改确认的人员明白,但其他未能参与的人员不能及时了解进度便会造成一些无用功. 4:产品和开发人员不能很好的协商解决确认功能的话,则某些bug的

分享一个很实用的java代码,可以将以逗号分隔的数字以从大到小的方式排序后返回

原文:分享一个很实用的java代码,可以将以逗号分隔的数字以从大到小的方式排序后返回 源代码下载地址:http://www.zuidaima.com/share/1550463693032448.htm 对于web开发中,多个id的排序很实用,有需要的牛人可以下载. package com.zuidaima.math; import java.util.Arrays; /** *@author www.zuidaima.com **/ public class SortIDString { pu

美团面试小感——认知撑起的格局

前两天因准备美团的面试,导致公众号文章断更了一天,今天就以一篇纯干货来弥补大家.美团的整个面试收获颇丰,与大家分享. 好多年没有面试了,为此专门准备了一天.在美团一个下午经历了四个多小时的三轮技术面试,才发现为面试所准备的面试题几乎无用,整个过程全靠临场发挥和经验积累. 面试之后对整个过程进行复盘.反思,又有了很大的收获,而且这些收获有必要分享给大家.下面会从面试题的学习感悟."面试"你的面试官.认知与格局等方面与大家聊聊. 缘起 一直在用美团的产品,但真正对美团印象深刻的却是它的技术

hiho #1114 : 小Hi小Ho的惊天大作战:扫雷·一

#1114 : 小Hi小Ho的惊天大作战:扫雷·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 故事背景:密室.监视器与充满危机的广场 “我们还是循序渐进,先来考虑这样一个简单化问题:”小Hi思索片刻,道:“在一个大小为2*N的广场,其中第一行里的某一些格子里可能会有至多一个地雷,而第二行的格子里全都为数字,表示第一行中距离与这个格子不超过2的格子里总共有多少个地雷,即第二行的第i个格子里的数字表示第一行的第i-1个, 第i个, 第i+1个,三个格子(如果i=1

小游戏小技巧教学8-5(大富翁结合RPG-角色遇到的突发状况)

大富翁结合RPG是从什么时候开始我没研究过,但是小时候就用纸当卡片画游戏卡,并且在纸上画不同的地图,并用骰子当移动方式,开始一场怪物道馆挑战与搜集(对战是用剪刀石头布来判断攻击成功与否)!是当时我跟我朋友们的回忆~而那时的我还没接触电脑游戏呢. 当我看到我以前自制的桌游搬到了手机或电脑线上游戏中,感觉很微妙呢~(虽然这灵感并不是那么稀奇) 用大富翁结合RPG的游戏已经不新鲜了,但是移动的方式.地图每格的突发状况却可以一而再再而三的引起玩家每一格都有不同的乐趣. 现在,就用一个传统的大富翁结合RP

小武小久成长记

Posts 小久坐玩具车 小武画狐狸 Jun 29, 2019 小武气垫船 Jun 18, 2019 小武剪纸 Jun 16, 2019 父亲节 Jun 15, 2019 组装车 Jun 10, 2019 小久帮爷爷修理 Jun 4, 2019 三个小朋友开船 Jun 2, 2019 小武画兔子 May 6, 2019 小武和小久用彩笔乱画 Apr 21, 2019 两兄弟吃药 Apr 20, 2019 小久叫爷爷 Apr 19, 2019 小久躲起来 Apr 19, 2019 小久够奶瓶很得意

CentOS6.5菜鸟之旅:安装输入法(小呀小企鹅)

一.前言 假如在登录系统的时候语言选择了中文,那么是系统会自带ibus的中文输入法.但由于我打算用英文版,于是就被小企鹅输入法(FCITX)折腾了两个晚上. 二.检查系统编码 在bash中输入 locale 查看系统编码,假如返回如下内容就得恭喜你了,直接安装fcitx就好了. LANG=en_US.UTF-8LC_CTYPE=zh_CN.UTF-8LC_NUMERIC="en_US.UTF-8"LC_TIME="en_US.UTF-8"LC_COLLATE=&qu

数字之魅 - 2.1

<编程之美>- 第二章节 - 数字之魅 - 2.1 - 求二进制数中1的个数 - 课后扩展问题解答 1 >> 如果变为32位的DWORD,显然使用解法四,五已经无法满足要求, 因为无法开辟这么大的数组空间,人为也不可能列举这么多的数, 来看解法一,二 ,算法的时间复杂度没有变,同样可以完美的解出, 来看解法三,时间复杂度依然只和1的个数有关,是最优的解法 2 >> 整数A和B的二进制表示中有多少位不同? 这里,首先想到,如果不同,这可以使用异或运算,然后问题就转化为求一

小他小他小他小他小他小他

小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他小他