我有一个包含 2^30 个无符号 32 位整数值的文件,我需要对它们进行排序,所以我想用最快的算法来完成它。需要使用所有可用的处理器并且使用不超过 256MB 的内存。
我现在的想法:最大 int 值(对于 32 位整数)Sm= 2^32,最低 = 0。可用内存为 M=2^28。
为
Sm*(sizeof int)/M = 2^32*2^5/2^28 = 2^9 份;每个零件尺寸 2^32/2^9 = 2^23。
首先,编写一个简单的阅读器,从输入文件中读取 int 值,检查它位于哪个范围内,并将该范围内的整数放入 tempfile。之后我将有 2^9 个文件:
1 file= Integers from 0:2^23
2 file = 2^23:2^24
3 file = 2^24:(2^24+2^23),
and etc...
- 使用 qsort 或金字塔排序等标准算法进行排序(对此算法有什么建议吗?)
我可以在这里使用 Python.multiprocessing 之类的东西进行并行排序,但它需要在每个进程开始之前安全地计算可用内存
您如何看待这种方法?可能存在更干净和更容易的解决方案吗?