【发布时间】:2012-04-27 18:14:42
【问题描述】:
我有一个包含 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 之类的东西来进行并行排序,但它需要在每个进程开始之前安全地计算可用内存
您如何看待这种方法?可能存在更干净、更简单的解决方案吗?
【问题讨论】:
-
我可以建议您最好的做法是尝试一下,看看它是如何工作的?
-
“需要使用所有可用的处理器”。你怎么会那么说?当然,您只想要最快的解决方案。为什么要关心使用了多少个处理器?
-
@AndrewAylett 我可以建议,反复试验并不是解决算法问题的最有效方法
-
@David 是的,使用所有流程并做出更好的解决方案可能是个坏主意
-
相关优秀书籍:amazon.com/Programming-Pearls-2nd-Edition-Bentley/dp/0201657880BTW 整数是唯一的吗?
标签: python algorithm sorting computer-science