1. 给定一个大小超过 100G 的文件, 其中存在 IP 地址, 找到其中出现次数最多的 IP 地址(hash文件切分)
把这个100个G的文件分成1000份左右的文件,然后把这个100个G里面相同的IP地址, 使用相同的散列
函数将所有IP地址转换为一个整数key,再利用 index=key%1000就可将相同IP分到同一个文件
2. 给定100亿个整数, 找到其中只出现一次的整数(位图变形, 用两位来表示次数).
这100亿个数据有三种状态:不存在、 存在一次、存在多次。
故此,我们需要对传统位图进行扩展,用两位来表示一个整数的状态:00表示不存在、01表示存在一次, 10表示存在多次,11表示无效状态。
3. 有两个文件, 分别有100亿个query(查询词, 字符串), 只有1G内存, 找到两个文件的交集(hash文件切分 + 布隆过滤器).
在32位操作系统下,一个整数有32个字节,所以100亿整数 = 100 * 4字节 = 40G,所以不能一次性查找
精确的算法:哈希文件切分
将两个文件中的query hash到N个小文件中,并标明query的来源,在各个小文件中找到重合的query
将找到的重合query汇总,得到交集
把一个文件的内容存入布隆过滤器,然后使用另一个布隆过滤器中查找是否存在,找到交集的元素,因为
可能出现哈希冲突,所以这是一种近似的算法, 不是百分之百精确
4. 给上千个文件, 每个文件大小为1K - 100M, 设计算法找到某个词存在在哪些文件中(倒排索引).
首先,把这个词存入一个单项链表中,头结点存储这个词,链表后面存储的都是文件名,然后依次遍历每个
文件,取出文件中的每一个单词并与这个词对比,若找到,就将此文件的文件名添加到后面的链表中,遍历
完所有文件,然后就得到了这个词存在在哪些文件中
来源:CSDN
作者:Qregi
链接:https://blog.csdn.net/Qregi/article/details/79477598