海量数据处理问题

1.给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址?

将100G的log file分成1000份
相同的Ip必定会在同一个小文件里
在每个文件里找出出现次数最多的ip

将找出来的1000个最多ip进行比较,找出最多的一个


2.给定100亿个整数,设计算法找到只出现一次的整数 
给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集 

个文件有100亿个int,1G内存,设计算法找到出现次数不超过2次的所有整数

在位图中,每个元素为“0”或“1”,表示其对应的元素不存在或者存在。


找到出现次数不超过2次的所有整数,变形位图,让每个数用两位来标记:

        00:0个         01:1个        10:2个        11:多个

使用位图以及位图的变形:http://blog.csdn.net/qq_35402412/article/details/79415172


3.给两个文件,分别有100亿个query,我们只有1G内存,如何找到两个文件交集?分别给出精确算法和近似算法

精确算法

        假设1个query只有30bites,100亿个为300G,我们只有1G内存,并且有两个文件,将两个文件分别切分1000份;

相同的ip%1000,必定会放到相同小文件中,则相交的结果即 {A0&B0,A1&B1...A999&B999}



近似算法 

    使用布隆过滤器,将A切分后存入布隆过滤器,用B来依次进行对比,若找到,则这个query为交集

如何扩展BloomFilter使得它支持删除元素的操作 

    对每一位引用计数,删除后只要改它的计数


如何扩展BloomFilter使得它支持计数操作

    引入计数,则不能使用位图,将BitMap _bm改为size_t *_bm;

  1. typedef struct{  
  2.     //BitMap _bm;  
  3.     size_t *_bm;
  4.     HASH_FUNC hashfunc1;  
  5.     HASH_FUNC hashfunc2;  
  6.     HASH_FUNC hashfunc3;  
  7. }BloomFilter; 

倒排索引

    给上千个文件,每个文件大小为1K—100M。给n个设计算法对每个词找到所有包含它的文件,你只有100K内存

搜索引擎的方法,将文件中的词存入哈希表,在找到的文件链到相应名词上



原文地址:https://www.cnblogs.com/yongtaochang/p/13615363.html