题目描述
给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
分析与解法
海量数据处理往往会很有趣,有趣在什么地方呢?
- 空间,available的内存不够,需要反复交换内存
- 时间,速度太慢不行,毕竟那是海量数据
- 处理,数据是一次调用还是反复调用,因为针对时间和空间,通常来说,多次调用的话,势必会增加预处理以减少每次调用的时候的时间代价。
解法一
咱们回到眼前要解决的这个问题,1个unsigned int占用4字节,40亿大约是4G个数,那么一共大约要用16G的内存空间,如果内存不够大,反复和硬盘交换数据的话,后果不堪设想。
那么怎么储存这么多的数据呢?还记得伴随数组么?还是那种思想,利用内存地址代替下标。
先举例,在内存中应该是1个byte=8bit,那么明显有
0 = 0000 0000
255 = 1111 1111
69 = 0100 0101
那么69可以表示0.2.6三个数存在,其余的7以下的数不