zoukankan      html  css  js  c++  java
  • 10亿个整数中找出前10万个数

    -)

    先考虑另一个问题:2000个乱序的32位整数中取出前10个。直接修改后的快排上。

    二)

    现在的问题是10亿个,假设32位int,单个数字占用4个byte,10亿个数字就大概是4G的空间。目前普通的个人电脑达不到这个要求,无法做到一次load进内存进行修改后的快排。为了更明显点,不妨放大到1000亿数据取前10万个,明显大多数的服务器也做不了一次load内存-___-。

    如果我有这个问题,我会问:单台机?多台机(或已经有map-reduce方式的计算集群)?

    1) 单台机,

    最小堆(或最大堆,看要求)。乖,不用争,排好队,一个一个来。

    忘了写上复杂度,如果总个数是N(比如说10亿),要的个数是M(比如说10万),那复杂度是N*log(M)。比快排弱一点,但是这个场景还好。

    2) 多台机map-reduce

    先分成N份(比如10份、100份),各自先找出前10万个,再从结果的N*10万个里找出前10万个。

    三)

    还没完,如果数据量是前边所说的1000亿,甚至10000亿个呢?

    看看,32位的整数撑死也就2^32=4G个,小于40亿,那10000亿个数是不是可以考虑Hash呢?

    大概想法,大概想法,想太多了,异想天开。

  • 相关阅读:
    Linux 基础命令(一)转
    Django项目发布 环境部署(下)
    Django项目发布 环境部署(中)
    Django项目发布 环境部署(上)
    deepin linux 打开ssh服务
    虚拟机网卡重启
    centos7 mysql数据库安装和配置
    centos7 修改网络配置
    MySQL----view & transaction
    MySQL ----函数
  • 原文地址:https://www.cnblogs.com/sunyongyue/p/first_100k_num_in_10billion.html
Copyright © 2011-2022 走看看