给定一个非常长的字节序列(假设有十亿或万亿),如何高效的统计1的个数
2010-12-24 16:17
211 查看
第一种方法是:计算每个输入单元中为1的位数,然后将它们相加;这个如何实现呢?
(1):使用类似( b &= (b-1) )对为1的位数进行迭代。
(2):查表(例如查询一个
元的表)。
第二种方法是:计算输入单元中每个输入单元的个数,然后将该个数乘以相应输入单元中为1的位数,最后对各个输入单元求总和。
再举个例子:
20世纪60年代早期,Vic Berecz发现Sikorsky飞机的模拟程序的大部分运行时间都消耗在计算三角函数上。进一步的观察表明,只有在角度为5度的整数倍时才计算这些函数。他应该如何减少时间?
答:使用几个72元(360/5)的表格来取代函数的计算,这样可以使该程序在IBM 7090上的运行时间从半小时降至1分钟。
(1):使用类似( b &= (b-1) )对为1的位数进行迭代。
(2):查表(例如查询一个
元的表)。
第二种方法是:计算输入单元中每个输入单元的个数,然后将该个数乘以相应输入单元中为1的位数,最后对各个输入单元求总和。
再举个例子:
20世纪60年代早期,Vic Berecz发现Sikorsky飞机的模拟程序的大部分运行时间都消耗在计算三角函数上。进一步的观察表明,只有在角度为5度的整数倍时才计算这些函数。他应该如何减少时间?
答:使用几个72元(360/5)的表格来取代函数的计算,这样可以使该程序在IBM 7090上的运行时间从半小时降至1分钟。
相关文章推荐
- 给定一个非常长的字节序列如何高效的统计1的个数
- 有一堆扑克牌,其中某张牌的张数超过了扑克牌总数的一半,请找到这张牌。写出算法思路、代码实现和算法的时间复杂度,要求算法尽可能高效。假设给定一个扑克牌的数组poker和它的大小n,请返回所求的扑克牌。
- 对于一个非常大的数,如何快速高效返回比它小的最大质数【腾讯笔试题】
- 假设有一个rand(0,1)的0,1随机生成器,如何对于给定的(a,b),随机生成一个x, 其中 a <= x <= b
- python高效编程技巧3(如何统计序列中元素出现的频率)
- 正整数序列Q中的每个元素都至少能被正整数a和b中的一个整除,现给定a和b,如何生成Q中的前几项
- 翻转子串 假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串。请将这个算法编写成一个函数,给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次检查子串的函数。
- 如何确定一个机器的字节顺序是大端还是小端
- 如何发挥一个字节的极限,存储大量内容
- 给定一个字符串a,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长? 输出需要删除的字符个数。
- 给定一个整数序列,请找出这个整数序列的中间数的值。
- 菜鸟如何成为一个高效程序员的成长之路
- 如何开始使用PyCharm,并拥有一个高效的Python IDE
- 给定两个字符串和一个字典,从头到尾找到最短变换序列的长度,使得:一次只能改变一个字符每个中间词必须存在于字典中
- 给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱).
- 面试题之括号匹配分析( 出栈序列是否合法,给定一个入栈序列,求所有可能的出栈序列等等)
- 如何把多条语句统计的结果集 用一个存储全部展示
- 哈希变形—位图(给定40亿个不重复的无符号数整数,没排过序,给一个无符号整数,如何快速判断一个数是否在这40亿个数中)
- 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。
- 假设一个网站系统存在两个配置文件web.config和config.config,那么我如何读取config.config的配置节呢?System.Configuration名字空间下的接口好象只能读