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

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

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

posted @ 2015-03-29 15:44  汇铁  阅读(711)  评论(0编辑  收藏  举报