外部排序 (External Sort)¶
约 151 个字 预计阅读时间 1 分钟
- 假设有\(N\)个数据,同时能处理\(M\)个record
- 最普通的方法需要\(1+\log{\lceil \frac NM \rceil}\)个pass
- 对于\(k-way\ merge\),需要\(1+\log_{k}{\lceil \frac NM \rceil}\)个pass,使用\(2k\)个tapes
最优分配策略¶
对于\(k-way\ merge\),如何分配才能使总的\(pass\)最小?以三阶合并为例(总共31个run):
-
- 写出\(k\)阶斐波那契数列
- 1, 1, 2, 4, 7, 13, 24, 44
-
寻找最优分配
- 找到第一个大于31的数:44
- 计算差值:44 - 31 = 13
- 初步分配:24, 13, 7
- 调整分配:(24-13), 13, 7,即11, 13, 7