将 1000 个文件合并为一个具有内存限制的排序文件 - 堆排序与桶排序

Merging 1000s of files into one sorted file with memory constraints - heap vs bucket sort

每个文件中以及所有文件中的编号都是唯一的。这是一种流行的方法(外部排序),当我们的计算机无法存储所有数据时,将 n 个文件合并为一个排序的文件:

虽然我明白这个算法如何帮助内存使用 - 涉及很多 I/O 开销。

另一种可能的方法是使用桶排序 - 特别是当数字均匀分布时:

现在,我相信后一种方法在时间复杂度方面可能会稍微快一些或至少相当,但会为临时文件使用更多存储 space。这两种方法在 时间复杂度 上是否具有可比性,或者即使在多次 I/O 调用之后,第一种方法总是更好?我是否在第二种方法中遗漏了一些耗时的步骤,从而使其不太理想?

我的理解是反过来。如果数字在可预测的范围内具有可预测的分布,则桶排序会更快。 (对于基于比较的排序,在 O(n)O(n log(n)) 的限制下。)更好的是,桶可以彼此独立地排序。这使得它们非常适合分布式排序。