40亿个没排序过的不重复的unsigned int的整数,现给一个数,怎么快速判断此数是否在40亿个数当中?

解决方法:使用位图法。

正常情况存40亿个int数有多少内存?
首先,1b=1byte(1字节=1b),1个int数有4个字节即4b,40亿就是4000000000x4b=16000000000b=14.901161193847…g。大约需要接近15g的内存。

如果使用位图法
一个bit存一个数,一个int就可以存放4x8=32个数(一个字节8位),那么40亿个数需要4000000000/32=125000000个int数来存,需要内存是125000000x4÷1024÷1024=476.837…M内存,由于是unsigned int,所以可以申请512M的内存。读入要查询的数,查看相应bit位是否为1,为1表示存在,为0表示不存在。
之后内容参考链接:https://baike.baidu.com/item/位图法/9947453

你可能感兴趣的:(40亿个没排序过的不重复的unsigned int的整数,现给一个数,怎么快速判断此数是否在40亿个数当中?)