从100亿个随机数中找到最大的10000个,求算法

从100亿个随机数中找到最大的10000个,求算法。。。。。。。必须要30个字以上

可以参考map-reduce的方法,先分组,把100亿的数据拆成1000块等,根据你机器的性能,然后分别对这一1000个分块数据,各自进行排序

然后再用归并排序的方式,从这一1000个块中逐步比较最大值,从而得到最大的10000个数据

看情况,如果是数据库存储的话,排序时加个top就行,如果是内存处理,这个数据量有点大,但是也就是排序,然后找前面的1000个,当然数组算法效率肯定比链表快,建议使用数组。

一个是大数,一个寻找最大数,因为数字大所以算法对速度的要求是要比较高的。
所以你需要的算法是必须结合这两样的,大数搜索其实也没有最快的,你可以在排序算法里面进行自己选择修改,我建议可以使用分治的快速搜索,大数可以通过python或者java中的大整数模块进行生成,这样会省事很多。

看看这篇文章,讲的很清楚:
http://blog.csdn.net/lemon_tree12138/article/details/48783535

http://blog.csdn.net/frimish/article/details/49420953

如果随机数是有一定范围的,比如32bit随机int,可以用位图法来做,也就是开一个 0~2^32-1 的数组,遍历数据,并且把对应的那个元素+1
然后从数组从后往前找1000个计数

1.如果是随机数不重复,可以直接用TreeSet,自带排序功能,调用API感觉比较省心,就是时间要花一些

2.如果是随机数可能重复,考虑用卷积来做。

假设有一个原点(0,0),有100亿个随机数,代表着与(0,0)的距离,然后给他们分配(使用Set,确保每次分配的点都不同)点坐标(相同数值,也得分配不同的点)
以(0,0)为原点,半径为X,X自转,每次X转完一圈,X++,
有一个count变量,
每次扫到一个点,count++

当count的值=9 999 989 999时
记录剩下的10000个点,即为那10000个随机数
这里不考虑,第10000个数字,同时有多个重复的情况

网络卡了。。。。