【发布时间】:2013-05-11 20:25:31
【问题描述】:
我有一个包含大量数据的文件,我想对它进行排序,在任何给定时间只保留内存中的一小部分数据。
我注意到合并排序在外部排序中很受欢迎,但我想知道它是否可以使用堆(最小或最大)来完成。基本上我的目标是在 100 项列表中获得前 10 项(使用任意数字),同时在内存中永远不会超过 10 项。
我主要了解堆,并且了解将数据堆放在适当的顺序中,我可以从中提取最后一部分作为我的解决方案,但我不知道如何处理没有每个怪异项目的 I/O。
想法?
谢谢! :D
【问题讨论】:
-
为什么不使用宽松的缓冲区呢?查找内存限制为 1000 个项目的 100 万个条目中的前 10 个可以在大约 1000 次 I/O 操作中完成,内存中的项目永远不会超过 1000 个。如果您将自己限制在内存中的 10 个项目,那么问题是不可能的 - 您需要至少 11 个限制。
标签: algorithm sorting external-sorting