1.给定100亿个整数,设计算法找到只出现一次的整数?
①方法一
100亿个整数就是400亿个字节,42亿九千万是4G,那么1G就是10亿字节,所以要存下100亿个整数需要40G的内存空间。因此我们采用位图100亿个整数大概就是1G,但是使用位图,需要用两个位标识一个数字(两个位可以标识四种状态),没有出现过为00,出现一次为01,出现两次及以上为10,11可以丢弃。所以2G空间就够了。
那么现在我们要找到只出现一次的整数就找到位图中映射01的那个数据即可。
②方法二
采用两个位图,每个位图是1G的大小,两个位图对应的位标识一个数据,两个位图对应的位都是0表示没有出现过;第一个位图对应位0,第二个位图对应位1则表示这个数只出现了一次;第一个位图对应位1,第二个位图对应位0则表示这个数出现了两次或两次以上。
2.给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件的交集?
①方法一
我们开一个位图,把第一个文件中的数字set到位图中,用第二个文件进行查找test,如果第二个文件中的数据在位图中被找到了,那么这个数就是交集的一份子,当把第二个文件中的数据查找完时就可以找到交集了。
②方法二
开两个位图,把文件1的数据set到位图1中,把文件2的数据set到位图2中,然后把两个位图进行与操作,那么与出来的结果位图中对应位为1的位所对应的数据的集合就是交集。
3.一个文件有100亿个int,1G内存,设计算法找到出现次数不超过2次的所有整数?
出现次数不超过2次的所有整数,一共有四种状态,因此需要用两个位来进行标识,00标识没有出现,01表示出现一次,10表示出现两次,11表示出现两次以上。找出现次数不超过2次的就是查找对应标识位为00,01,10的数据。
4.给两个文件,分别有100亿个query,我们有1G内存,如何找到这两个文件的交集?分别给出精确算法和近似算法。
①

本文探讨了大数据处理中的几个经典问题,包括寻找只出现一次的整数、查找文件交集、限制次数的整数查找、近似与精确交集算法以及布隆过滤器的删除支持。通过位图和布隆过滤器等数据结构,提出了解决这些问题的有效策略。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



