【发布时间】:2017-09-26 05:50:26
【问题描述】:
我有 50 个大约 10 GB 数字的文本文件。我必须对这些数字进行排序。我的第一个想法是使用应用合并排序,即分别对每个文件进行排序并合并它们。我正在使用数组来加载这些数字。当我运行应用程序时,我的程序由于内存不足而崩溃。所以我的问题是:
- 使用哪种数据结构?
- 如何管理内存?
- 合并排序方法是否正确?如果没有,请提出方法。
任何帮助将不胜感激。
【问题讨论】:
-
数字的最小值和最大值是多少?
-
是的,事实上我创建了较小的文件并对其进行了排序。但我正在加载文件以合并它们然后我遇到了问题。
-
@samgak 我没有看到最大值,但数字最多为 7 位。最小值是 2 位数,但也可能是个位数,我也没有检查。
-
您不会为了合并它们而将所有文件加载到内存中。相反,您从每个文件加载一个项目,找到最小的项目,然后输出它。然后你从一个来自的文件中加载一个项目并重新做一遍。这最好通过优先队列来完成。见stackoverflow.com/q/20802396/56778。或者,如果您有权访问Gnu sort utility,您可以让它对文件进行排序和合并。
标签: algorithm sorting out-of-memory mergesort