如何确定合并排序的最佳文件大小?

时间:2010-12-04 18:48:04

标签: algorithm optimization sorting mergesort

你们中的大多数人都会意识到这一点,但对我来说这有点令人惊讶:使用mergesort排序(例如)每个4Mb大小的96个文件比使用mergesort的6个64Mb文件更快(保持信息总量不变)。我偶然发现了这个发现。所以这就引出了一个问题,mergesort的最佳输入文件大小是多少?

我假设在排序时间(y轴)和文件数量(x轴)之间存在曲线形状关系。是否有算法,是更经验法则还是只是尝试几种不同的文件大小?影响这一点的明显因素是: *操作系统可以同时打开的最大文件数 *读取/写入硬盘的速度

欢迎任何参考!

1 个答案:

答案 0 :(得分:0)

如果您的排序涉及移动文件,那么“最快”排序算法的常规度量并不真正适用。对于移动文件,更快的排序算法将包括最小化文件写入次数。

可以使用选择排序,并且非常接近可能的最小交换次数,但是在最坏的情况下,每个文件必须写入两次:一旦它被交换出来为文件放置的方式它属于那里,一旦交换到它应该到的地方。

有一种算法最多可执行n + 1次分配。 'swap'(这是大多数排序算法使用的)涉及三个赋值,(使用临时变量)。这种方法几乎可以通过选择排序而不实际交换任何东西。通过将每个选定的项目写入新内存,或者将排序顺序保存在内存中,然后在事实之后重新组织同一内存空间中的文件(碎片整理样式)。在数据复制方面,该算法实际上是最小的。当复制项目很昂贵(在磁盘上排序数据)时,这是理想的选择。