zoukankan      html  css  js  c++  java
  • 10G个64bit整数,找出中位数

    10G个64bit整数,找出中位数

      题目:在一个文件中有10G个64bit整数,乱序排列,要求找出中位数。内存限制为2G。

      解法:内存限制为2G表面上是限制,实际上是一种提示,在提示我们如何利用2G内存来解决这道题。  

      2G内存可以存放256M个64bit整数。我们可以将64bit的整数空间(2^64)平均分成256M(2^28)个取值范围,每个范围为(2^(64-28)),用2G的内存对每个取值范围内出现整数个数进行统计。这样遍历一遍10G整数后,我们再从头把2G中的数字统计一遍,便知道中数在那个区间内出现,以及这个范围内总共出现了多少个整数,第一轮中,这个区间为2^(64-28)。

      如果中数所在范围出现的整数比较少,我们就可以对这个范围内的整数进行查找(此时问题转化为给定整数序列,寻找第K大数,O(N)可解决,这里的N<2^31次方个数。如果这个范围内出现的整数比较多,我们还可以采用同样的方法将此范围再次分成多个更小的范围(256M=2^28,所以最多需要3次就可以将此范围缩小到1,也就找到了中数)。

      如果比较懒的话,直接拆分3次,得到1区间然后统计。如果想更优化的就,就采用上面说的,中途转化为寻找第K大数问题。

  • 相关阅读:
    重构第30天 尽快返回 (Return ASAP)
    Thingsboard MQTT连接至服务器
    Thingsboard学习之三启动Thingsboard
    Thingsboard学习之二安装Docker和Docker-Compose
    Thingsboard学习之一CentOS安装系统更新
    CentOS 修改固定IP地址
    macbook配置homebrew
    macbook配置flutter环境变量
    Linux单独打包工具-Ubuntu
    postman测试API
  • 原文地址:https://www.cnblogs.com/tekkaman/p/3170661.html
Copyright © 2011-2022 走看看