1)给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址?!
解决方法
将100G分成100份,将每个ip映射到相应文件中 ip_if=ip%100
找出每个文件中的出现次数最多的一个ip
再将100份里找出来的最多的一个放入一个哈希表中进行比较找出最大值
2)与上题条件相同,如何找到top K的IP?如何直接⽤用Linux系统命令实现?
解决方法
将100G分成100份,将每个ip映射到相应文件中 ip_if=ip%100
找出每个文件中的出现次数最多的k个ip
再将100份里找出来的最多的k个放入一个哈希表中进行比较找出最大的k 个
3)给定100亿个整数,设计算法找到只出现一次的整数!
将100亿个数分拆成1000份文件,再将每份文件里使用位图,并用两位bit表示数字出现的次数,00存出现0次的数,01存放出现1次的数,10存放出现多次的数,11舍弃,再将1000份中出现一次的数全部合并到一个文件里存放即可
4)给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集!
将第一个文件里的数用哈希映射到1000个文件中,将第二个文件用同样的哈希映射到另1000个文件中,然后比较每个哈希映射相同的文件即可
5)1个文件有100亿个int,1G内存,设计算法找到出现次数不超过2次的所有整数!
将100亿个数分拆成1000份文件,再将每份文件里使用位图,并用两位bit表示数字出现的次数,00存出现0次的数,01存放出现1次的数,10存放出现2次的数,11舍弃,再将1000份中出现次数不超过二的数全部合并到一个文件里存放即可
6)给两个文件,分别有100亿个query,我们只有1G内存,如何找到两个文件交集?
算法和近似算法!
精确算法:
将两个文件分别存入相同哈希算法的1000个哈希桶(共两千个)文件,再在每个文件找出相同的query
近似算法:
利用布隆过滤器进行比较
7)如何扩展BloomFilter使得它支持删除元素的操作?!
将bloomfilter中每一位扩展成一个技术为,例如00表示无,01表示1,当没删除一个,计数器减1,直到减为0为止
8)如何扩展BloomFilter使得它支持计数操作?!
同上题思路
9)给上千个文件,每个文件大小为1K—100M。给n个词,设计算法对每个词找到所有包含它的文件,你只有100K内存!
对上千个文件生成1000个布隆过滤器,并将1000个布隆过滤器存入一个文件中,将内存分为两份,一分用来读取布隆过滤器中的词,一块用来读取文件,知道将每个布隆过滤器读完为止