首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >外部排序

外部排序
EN

Stack Overflow用户
提问于 2011-02-24 04:08:09
回答 2查看 11K关注 0票数 14

在这个网页上:CS302 --外部排序

将生成的运行合并为连续更大的运行,直到对文件进行排序。

正如我引用的,我们如何合并结果运行在一起?我们没有那么多记忆。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-24 04:13:24

想象一下你的数字是1-9

代码语言:javascript
运行
复制
9  7  2  6  3  4  8  5  1

让我们假设一次内存中只有3块。

因此,您可以将它们分解为3块,并对每个块进行排序,将每个结果存储在一个单独的文件中:

代码语言:javascript
运行
复制
279
346
158

现在,您可以将这三个文件中的每一个作为流打开,并从每个文件中读取第一个值:

代码语言:javascript
运行
复制
2 3 1

输出最低值1,并从该流中获取下一个值,现在有:

代码语言:javascript
运行
复制
2 3 5

输出下一个最低值2,然后继续,直到输出整个排序列表为止。

票数 46
EN

Stack Overflow用户

发布于 2011-02-24 04:10:28

如果您将两次运行AB处理为更大的运行C,则可以逐行生成更大的运行,但一次最多只能读取2行。因为这个过程是迭代的,而且您正在处理数据流,而不是完整的数据切分,所以您不需要担心内存的使用。另一方面,磁盘访问可能会使整个过程变慢--但它肯定比一开始就不能完成工作要好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5100252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档