首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >双向多向归并排序

双向多向归并排序
EN

Stack Overflow用户
提问于 2012-04-08 12:29:40
回答 1查看 981关注 0票数 3

这是“数据库系统全书第二版”一书中的一个问题-第15章:基于排序的两遍算法。有时,如果我们把最后一个子列表留在内存中,就有可能节省一些磁盘I/O。甚至可以使用少于块的子列表来利用这种效果。这样可以节省多少磁盘I/O?

我计算出,您将原始关系划分为子列表,并在第一次遍历中对它们进行排序,并将最后一个列表保留在内存中,这将占用不到M-1个块。那么你是如何进行排序的呢?

EN

回答 1

Stack Overflow用户

发布于 2013-08-21 07:35:52

这只是一个猜测,但我怀疑答案可以描述如下。标准的“一次一级”合并排序如下所示:

代码语言:javascript
复制
1 1 1 1 1 1 1 1
--- --- --- ---  -- pass 1
 2   2   2   2
 -----   -----   -- pass 2
   4       4
   ---------     -- pass 3
       8

请注意,在进入下一个级别之前,我们对输入数据执行了一次完整的传递。

另一种选择是“一次子树”合并排序,如下所示:

代码语言:javascript
复制
1 1 1 1 1 1 1 1
--- | | | | | |
 2  --- | | | |
 |   2  | | | |
 -----  | | | |
   4    --- | |
   |     2  ---
   |     |   2
   |     -----
   |       4
   ---------
       8

在这里,我们正在将每个子树与其相同高度的邻居合并,只要那个邻居已经构建好了。我们做了相同数量的工作,但局部性得到了改善。

干杯。

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

https://stackoverflow.com/questions/10060386

复制
相关文章

相似问题

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