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

标签 algorithm optimization sorting mergesort

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

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

欢迎任何引用!

最佳答案

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

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

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

关于algorithm - 如何确定合并排序的最佳文件大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4355192/

相关文章:

algorithm - 在删除大小为 N 且没有重复键的堆中的最大操作期间,必须交换的最小项目数是多少?

php - 在 PHP 中以编程方式组合图像

java - 最佳搜索字符串java中的子字符串

javascript - jqGrid排序问题id名称和索引不一样

algorithm - 散列值如何映射到布隆过滤器中的向量?

algorithm - 缓存失效——有通用的解决方案吗?

jquery - 非常大的 Prestashop MySQL 查询会导致大量数据库使用

java - 插入排序,4 维数组 Java

c - 冒泡排序与插入排序运行时

algorithm - 等式两边的渐近符号