哈希桶的应用

大家好, 今天分享是: 哈希桶的一个应用

先试着回答这个一个问题, 看看你的思考

Q: 给定 a、b 两个文件,各存放 50 亿个 URL,每个 URL 各占 64B,内存限制是 4G。请找出 a、b 两个文件共同的 URL。

分析: 主要由于有内存的限制,所以思考的方向就微妙的变化, 不过如果用一个大数据计算平台来实现,其原理也是一样,即: 分治策略

我们可以这样处理:把一个文件中的 URL 按照某个特征划分为多个小文件,使得每个小文件大小不超过 4G,这样就可以把这个小文件读到内存中进行处理了

思路如下:

1. 处理大文件分成小文件

遍历文件a,对遍历的URL处理: hash(URL) % 1000, 根据计算结果把URL存入a0, a1, ...., a999。 这样每个文件的大小约: 300MB (50 * 2 ^{30} / 10 ^{3} * 64), 桶的个数选择为:1000,满足后续文件的处理不会超过内存限制就可以

使用同样的方式处理b文件, 得到 b0, b1,...,b999

这样处理之后, 所有相同的URL都在对应的小文件中, 即:( a0,b0),... ,(a999,b999)

2.  遍历\sum_{0 <= i <= 999}^{i} a_{i},把 URL 存储到一个HashSet集合中。然后遍历对应的b{_i}中每个 URL,看在HashSet集合中是否存在,若存在,说明这就是共同的 URL,可以把这个 URL 保存到一个单独的文件中。

你想出来了么?

你可能感兴趣的:(我的思考,哈希)