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