欢迎关注,敬请点赞!
问题描述:
给你A、B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是16G,让你找出A、B文件共同的URL。
常规的解决办法
也是最容易想到的,就是对于文件A,读入内存。对于文件B中的每一个元素,判断是否在A中出现过。
我们来分析一下这样做的空间和时间复杂度:第一步,读入文件到内存,需要的内存是 50 ∗ ( 10 ∗ ∗ 8 ) ∗ 64 = 320 G 50*(10**8)*64 = 320G 50∗(10∗∗8)∗64=320G ,显然我们在实际中没有那么大的内存。
另外,通过遍历A文件和B文件中的每一个元素,需要的时间复杂度是 o ( M ∗ N ) o(M*N) o(M∗N),M、N是两个文件元素的大小,时间复杂度是 ( 50 亿 ∗ 50 亿 ) (50亿*50亿) (50亿∗50亿)。
布隆过滤器
基本思路:
- 设数据集合 A = { a 1 , a 2 , … … , a n } A = \lbrace a_1, a_2, ……, a_n \rbrace A