1、给个超过100G的logfile, log中存着IP地址, 设计算法找到出现次数最多的IP地址?
第一题:首先我们的思路就是利用哈希进行文件的切分,我们把100G大小的logfile分为1000份,那么下来差不多没一个文件就是100M左右,然后再利用哈希函数除留余数的方法分配到对应的编号文件中,然后得出每个文件中出现次数最多的IP,然后堆排序取得这1000个ip中出现次数最多的。
2、与上题条件相同,如何找到topK的IP?如何直接Linux系统命令实现?
这一道题的思路就是我们从题意可以看到这道题是来找top K的IP,topK我们的思路就是用堆来实现,找Top,就需要用小堆,这个是根据堆的数据特性,我们建立成小堆,然后每次和堆顶最小的进行比较,然后再次进行向上调整,最后,就可以得到一个堆顶是最小IP,的一个小堆,这个小堆就是我们需求的K个IP,需要建的是K个节点的堆。
3、给定100亿个整数,设计算法找到只出现一次两次或者多次的整数!
由于是整数,所以我们采取的思路就是我们可以采用位图,100亿个整数,大致就是需要1.25G的内存进行存储。一个数字必须要2个位来进行表示状态,比如说,00表示不存在,01表示存在一次,10表示存在多次。这样就可以全部表示出每一个数存在的状态,这里我们就需要的内存是2.5G。
4、给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件件交集!
这个我们有多种思路,我们采用哈希切分,100亿个整数我们来切分为1000个文件,这样就有2000个文件,然后我们进行哈希算法,A的100亿个数根据余数不同,对应存在A0文件-A999文件,这样就完成了A的哈希切分,然后我