• 系统设计题海量数据找中位数


    题目背景

    只有2G内存的pc机,在一个存有10G个整数的文件,从中找到中位数

     

    思路

    数据量太大,无法在较短时间内迅速解决,或者无法一次性装入内存。每个数字在内存中占4B,10亿个数字完全加载到内存中需要:10*108*4B ,约为:4GB内存。显然不能把所有的数字都装入内存

     

    中位数定义:数字排序之后,位于中间的那个数。比如将10亿个数字进行排序(位置从1到10亿),排序之后,位于第5亿个位置的那个数 就是中位数

     

    方法一

    对于数据量大,数据相似度高的数据集,我们可以使用Trie数

    Trie树是一种非常强大的处理海量字符串数据的工具。尤其是大量的字符串数据中存在前缀时,Trie树特别好用。Trie树在字典的存储,字符串的查找,求取海量字符串的公共前缀,以及字符串统计等方面发挥着重要的作用。用于存储时,Trie树因为不重复存储公共前缀,节省了大量的存储空间;用于以字符串的查找时,Trie树依靠其特殊的性质,实现了在任意数据量的字符串集合中都能以O(len)的时间复杂度完成查找(len为要检索的字符串长度);在字符串统计中,Trie树能够快速记录每个字符串出现的次数。

     

    方法二

    堆排序,求top5G的数据,但是内存只有2G,所以我们先构建一个1G大小的大顶堆,然后求出第1G个元素,然后利用该元素构建一个新的1G大小的堆,求出第2G大的元素,依次类推,求出第5G大的元素,需要遍历5次这个元素集合

  • 相关阅读:
    RecycleView实现多布局可展开列表
    ubuntu在anaconda2下安装anaconda3环境 && 在Pycharm中配置Python3
    向量的叉乘
    角动量与角动量守恒
    语言学 —— 中文的构词与规律
    动力系统 —— 液压与气压
    Keras GRU 文字识别
    造物的科学 —— 保温瓶、衣服防盗器
    循环神经网络RNN模型和长短时记忆系统LSTM
    ResNet网络结构
  • 原文地址:https://www.cnblogs.com/ak918xp/p/16369572.html
Copyright © 2020-2023  润新知