file - 2S-1D vs 2S-2D vs Polyphase 文件排序
问题描述
有人可以解释一下哪个更好,它们的时间和空间复杂性以及您认为值得了解的任何重要内容的比较。我知道 2S1D 和 2S2D 是如何工作的。
解决方案
我假设“S”表示源,“D”表示目标,因此您正在比较 2 源 1 目标与 2 源 2 目标,以及普通合并排序与多相合并排序。wiki 文章包括以下案例:
https://en.wikipedia.org/wiki/Polyphase_merge_sort
请注意,wiki 文章侧重于外部排序,其中忽略了比较开销,只考虑了数据的移动。
对于具有随机存取存储器的内部普通归并排序,2S-2D 排序只需要两个数组,因为 2 个源可以是偶数和奇数在单个源数组中运行,并且输出也可以是单个数组。对于内部多相归并排序,您至少需要 3 个数组 (2S-1D)。在我的系统上,尽管 3 阵列多相归并排序比 2 阵列普通归并排序多移动约 5%,但多相最终快约 5%,可能是由于缓存问题。
琐事 - 对于 3 堆栈(LIFO 仅接口版本的 2S-1D),多相合并排序是最快的。
推荐阅读
- c# - 从 Visual Studio 2019 运行时在 IIS Express 上获取 NullReferenceException
- javascript - 简单 if else 语句的时间复杂度
- r - 在 R 中的 lm() 中乘以或除变量时出现奇怪的新问题
- java - 使用 Selenium Java 自动生成上次生成的 PDF
- python - numpy数组中每个元素的前x个字符
- python - 根据相机位置查找两个原点之间的平移
- kubernetes - 使用 Stackdriver/Cloud Monitoring Rest API 查询多个时间序列
- javascript - 工具提示在 Firefox 中有效,但在 Chrome 中无效
- java - 如何将二维数组乘以标量
- python - 我将如何从 Pyspark 数据框中的所有列中删除负值?