zoukankan      html  css  js  c++  java
  • 海量数据处理问题:两个文件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
  • 相关阅读:
    Windows Store App 主题动画
    Windows Store App 过渡动画
    Windows Store App 控件动画
    Windows Store App 近期访问列表
    Windows Store App 文件选取器
    Windows Store App 访问应用内部文件
    Windows Store App 用户库文件分组
    Windows Store App 获取文件及文件夹列表
    Windows Store App 用户库文件夹操作
    Windows Store App 用户库文件操作
  • 原文地址:https://www.cnblogs.com/widic/p/7382685.html
Copyright © 2011-2022 走看看