【发布时间】:2018-07-14 13:19:43
【问题描述】:
假设我们要执行外部排序并有 M 个已排序的块,其中每个块包含 k 个可比较的项目,使得 n = Mk。在这种情况下,k 也是指您可以放入内存中进行排序的最大项目数,n 是要排序的项目总数。
然后在合并排序中使用合并功能,每个元素都必须与来自其他块的所有其他元素进行比较,这给了我一个元素的 O(M) 比较。由于我们必须对所有元素执行此操作,因此我们将有 O(M * Mk) = O(M^2 * k) = O(nM) 时间复杂度。
一开始这似乎是线性的,但假设在最坏的情况下我们只能将 1 项放入内存中。所以我们有M=n个块,时间复杂度直接是O(n^2)。合并如何在外部排序中为您提供线性时间?
另外,在k = 1的情况下,在无法进行任何比较的情况下,排序怎么可能实现?
【问题讨论】:
-
当比较每个数组的第一项时,可以使用二分查找来比较下一项。
标签: arrays algorithm sorting merge