码迷,mamicode.com
首页 > 其他好文 > 详细

如何在很大数量级的数据中(比如1个亿)筛选出前10万个最大值?

时间:2015-03-29 16:20:07      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:

今天在知呼,看到一问:如何在很大数量级的数据中(比如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。

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

如何在很大数量级的数据中(比如1个亿)筛选出前10万个最大值?

标签:

原文地址:http://www.cnblogs.com/oldtab/p/4375775.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!