位图 - BitMap
(二进制位数组,节省内存,速度O1)(只能处理有范围正整数)
如何从40亿个qq号中快速查找到一个qq号是否存在?
要求内存在1GB内,且响应速度在一秒内。
无法使用hashset(内存不够)、hashMape也不行他的key也是存在内存上的
使用一个二进制数组,开辟43亿二进制位数组,里面存的都是1.0.(占用512MB内存)
为啥要43亿呢,因为我们qq号是一个int类型,4个字节,4*8=32位,2的32次方=43亿
数组充当一个map:
外部排序:
借助磁盘文件的排序算法
内部排序:借助内存的排序算法
哈希分治:
布隆过滤器:
提速但有一定误判率
总结![](https://img-blog.csdnimg.cn/a0fc66e250894f10aa09d79d9dfc887e.png)
①:位图bitsmap
② ③:手机号是11位的
否则就需要用到哈希分治、或外部排序了
④:小顶堆