代码改变世界

bitmap统计数字

2015-05-29 11:03  放作夥  阅读(509)  评论(0编辑  收藏  举报

1)几亿个无符号整数集合,一个数字出现A次,其余出现B次,求出现A次的数字。

 

无符号整数的范围不超过10位数,开一个10X10的数组,统计集合的数字每位的数字的出现次数,

输出模A为0的数字。

 

2)  已知某个文件内包含一些电话号码,每个号码为8位数字,统计不同号码的个数。

8位最多99 999 999,大概需要99m个bit,大概10几m字节的内存即可。 (可以理解为从0-99 999 999的数字,每个数字对应一个Bit位,所以只需要99M个Bit==12MBytes,这样,就用了小小的12M左右的内存表示了所有的8位数的电话)

 

3)  2.5亿个整数中找出不重复的整数的个数,内存空间不足以容纳这2.5亿个整数。

2.5亿个bit是32M左右,这么看来位图相当相当节省空间。将bit-map扩展一下,用2bit表示一个数即可,0表示未出现,1表示出现一次,2表示出现2次及以上,在遍历这些数的时候,如果对应位置的值是0,则将其置为1;如果是1,将其置为2;如果是2,则保持不变。或者我们不用2bit来进行表示,我们用两个bit-map即可模拟实现这个2bit-map,都是一样的道理。

 

4)  给你A,B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出A,B文件共同的URL。如果是三个乃至n个文件呢?   

找出共同的,言下之意就是去重

 

位图的应用好像蛮多的,之前见过位排序。