Python程序员面试算法宝典---解题总结: 第9章 大数据 9.1 如何从大量的url中找出相同的url

# -*- coding: utf-8 -*-

'''
Python程序员面试算法宝典---解题总结: 第9章 大数据 9.1 如何从大量的url中找出相同的url

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

分析:
海量数据处理方法有:
hash(字典),位图,布隆过滤器,倒排索引,数据库优化,外部排序,Trie数,堆,
双层桶,MapReduce。
重点:
哈希,位图,Trie树,堆。
50亿个url占据=50亿*64B = 50 0000 0000 * 64 B = 3200 0000 0000
= 3200 00000 KB = 320000 MB = 320GB
实际只有4GB,显然不能将所有数据全部放入内存。
4GB可以存放=4GB/64B = 4 * 2^30 / 2^6 = 2^5 M = 32* 2^20个url。

考虑用分治法,计算每个url的哈希值,将哈希值相同的url存入同一个文件中。
为了能让内存中可以放得下,可以考虑平均每个文件大约600MB,
这样a,b中相同哈希值划分得到的文件总共内存大约1.2GB,然后寻找这两者共同url
最多1.2GB,这样可以控制整个内存占用最多不超过2.4GB。


关键:
1 书上解法
步骤1: 计算每个url的哈希值hash,然后用 hash % 500得到值i,
至此,将文件a划分为a0,a1,...,a499,
对文件b同样如此划分得到: b0, b1, ...,b499
这样与a0中相同的url一定在b0中
注意:
如果ai的大小超过2G,可以继续哈飞为a11,a12,...

步骤2:
遍历ai,bi,读取ai中每个url,放入字典中,
然后遍历bi中的url,将相同的url放入字典中对应键的数组中,
最后遍历整个字典,将相同键的数组存入到不同的文件中,
这样就获取了相同的url。

2 没有想到
2.1 是因为忘记通过计算url的哈希进行负载均衡处理,
2.2 然后相同哈希的文件通过字典法来存入到同一个键对应的数组中
2.3 关键是选取哈希除模的值大体为500,根据内存计算得到

参考:
Python程序员面试算法宝典
'''


def process():
    pass


if __name__ == "__main__":
    process()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值