问题:40亿个不重复的无符整形(没排序),然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
最笨的方法:40亿个不重复的无符整形,需要不到4G(40亿) * 4 =
16G的内存空间来存储所有的数,然后进行遍历。
位图算法就是利用,2进制位表示是否存在。0表示不存在,1表示存在。
一个32位的无符整形可以表示整数0~31是否存在。那么超过31的整数怎么办了?
这里就需要一个连续的无符整形数组--uint[n],利用数组下标来扩展计算范围。
uint[0]表示0~31是否存在,uint[1]表示32~63是否存在。。。
那么只需要16G/32 = 512M内存来存储就可以了。