大数据有关题目
哈希函数可以将数据按照种类均匀分流。
布隆过滤器用于集合的建立与查询,同时节省大量空间。
一致性哈希解决数据服务器的负载管理问题。
利用并查集结构做岛问题的并行问题。
位图解决某一范围上数字的出现问题,同时节省大量空间。
利用分段统计思想,并进一步节省大量空间。
利用堆、外排序做多个处理单元的结果合并。
题目一:
32位无符号整数的范围是0-4294967295,现在有一个正好包含40亿个无符号整数的文件,所以在整个范围中必然有没出现过的数。可以使用最多1GB的内存,怎么找到所有没出现过的数?
进阶:内存限制为10MB,但是只用找到一个没出现过的数即可。
普通:如果用哈希表来保存出现过的数,那么如果40亿个数都不同,则哈希表的记录为40亿条,存一个32位整数需要4B,所以最差情况下需要40亿*4B=160亿字节,大约需要16GB的空间,这是不符合要求的。
哈希表需要占用很多空间,我们可以使用bit map的方式来表示数出现的情况。具体地说,是申请一个长度为4294967295的bit类型的数组bitArr,bitArr上的每个位置只可以表示0或1状态。8个bit位1B,所以长度为4294967295的bit类型的数组占用500MB的空间。
怎么使用这个bitArr数组呢?就是遍历这40亿个无符号数,例如,遇到7000,就把bitArr[7000]设置为1,遇到所有的数时,就把bitArr相应位置的值设置为1。
遍历完成后,再依次遍历bitArr,哪个位置上的值没有被设置为1,哪个数就不在40