• 如何在很大数量级的数据中(比如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。

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

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

  • 相关阅读:
    【Algorithm】基数排序
    【Algorithm】堆排序
    【Algorithm】快速排序
    【Algorithm】自顶向下的归并排序
    【Algorithm】自底向上的归并排序
    【Algorithm】插入排序
    【Algorithm】选择排序
    java的几个format
    java restful接口
    java解析EXCEL
  • 原文地址:https://www.cnblogs.com/oldtab/p/4375775.html
Copyright © 2020-2023  润新知