zoukankan      html  css  js  c++  java
  • 如何在很大数量级的数据中(比如1个亿)筛选出前10万个最小值?

    今天在知呼,看到一问:如何在很大数量级的数据中(比如1个亿)筛选出前10万个最大值?

    这是某人面试时,被问到的问题。

    我,试答如下:

    m取前n
    以取小为例吧。我喜欢小。
    以数据总量,分:小、中、大,三种情况来分析。

    1、小:全部读入内存,排序,取前n。

    2、中:
    2.1:分几次读入(次数为k=总数据/内存大小),分别排序、写回读入点。致全部读一遍。形成k个顺串(称之数据锥)。
    2.2:各锥读取一节(量为内存/K),到内存(称之:锥节)。
    2.2:各锥节尖做比较,小的写到另一块内存区(称之输出缓区)。如,某锥缓节空,读该锥的下一节。
    2.3:致输出缓存区满。
    2.4:写到结果文件。
    2.5:结果够,结束。否则,继续2.2。

    3、大:
    3.1:若干单机,做2.1到2.3,暂停。
    3.2:另一单机,做总机。从各单机输出缓存区,读一节到总机内存区(称总锥节)。
    3.3:各总锥节尖做比较,小的写到总机的另一块内存区(称之总输出缓存区)。如,某总锥节空,读该锥对应单机输出缓存的下一节。
    3.4:总缓存区满,写到结果文件。
    3.5:结果够,结束。否则,继续3.3。

    以上算法描述,或有欠缺。但,作为面试答案,我想,应该够了吧。

    第一篇博客,就贴它。算是试试手。

  • 相关阅读:
    MVC4笔记 @functions @model @using
    NET平台4.0 发布网站流程及出错总结
    C#读写txt文件的方法
    jQuery Validate验证框架详解(转)
    用C#写的读写CSV文件
    devexpress 数据导入(gridcontrol 导出 csv)
    DevExpress XtraGrid 数据导出导入Excel
    DevExpress 表中数据导出
    DevExpress 重编译 替换强命名 修改源码
    Delphi 的运算符列表
  • 原文地址:https://www.cnblogs.com/oldtab/p/4375775.html
Copyright © 2011-2022 走看看