• 海量数据处理问题:两个文件a和b,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出a,b文件共同的URL


    这是一个百度的面试题
    在网上搜了下答案是这样的
    出处: http://blog.csdn.net/zhangtian6691844/article/details/51120772

    1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?
        方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。
        s 遍历文件a,对每个url求取103x21,然后根据所取得的值将url分别存储到1000个小文件(记为83x21)中。这样每个小文件的大约为300M。
        s 遍历文件b,采取和a相同的方式将url分别存储到1000各小文件(记为81x21)。这样处理后,所有可能相同的url都在对应的小文件(179x21)中,不对应的小文件不可能有相同的url。然后我们只要求出1000对小文件中相同的url即可。
        s 求每对小文件中相同的url时,可以把其中一个小文件的url存储到hash_set中。然后遍历另一个小文件的每个url,看其是否在刚才构建的hash_set中,如果是,那么就是共同的url,存到文件里面就可以了。
        方案2:如果允许有一定的错误率,可以使用Bloom filter,4G内存大概可以表示340亿bit。将其中一个文件中的url使用Bloom filter映射为这340亿bit,然后挨个读取另外一个文件的url,检查是否与Bloom filter,如果是,那么该url应该是共同的url(注意会有一定的错误率)。
    CopyRight @Widic 2017 Mail:widicjane@163.com
  • 相关阅读:
    WPF Caliburn 学习笔记(五)HelloCaliburn
    MSDN 教程短片 WPF 20(绑定3ObjectDataProvider)
    MSDN 教程短片 WPF 23(3D动画)
    比赛总结一
    HDU3686 Traffic Real Time Query System
    HDU3954 Level up
    EOJ382 Match Maker
    UESTC1565 Smart Typist
    HDU3578 Greedy Tino
    ZOJ1975 The Sierpinski Fractal
  • 原文地址:https://www.cnblogs.com/widic/p/7382685.html
Copyright © 2020-2023  润新知