我正在尝试从数十亿的巨大列表中获得最大数字的前N个元素的最佳解决方案。到目前为止,我已经有了这个想法:
get the first N elements, sort them in descending order (list A).
for N+1 to last element:
min = the Nth element.
if the N+1 element > min then insert it into list A and sort it.
remove the last element
实际上,它似乎不会消耗太多内存,而且比仅仅使用list更快。整个大列表后面是前N个元素
但是,这种排序不会使用多核CPU的全部容量。是否有任何内置功能或任何其他方法可以完成多进程的工作?或者能够充分利用计算能力,从而产生更快的结果?
如果您希望使用并行化的工作,您可以使用python库,如Ray。
使用Ray,您可以通过将数据划分为多个集并让每个线程尝试找到每个子集中最大的N个数字来并行化搜索。然后,你应该有k个包含N个"大"数的列表。从那里,你可以找到最大的N个数字。
如果你想了解更多关于Ray文档,你可以查看文档。
文档:https://docs.ray.io/en/latest/