“对外存中的比较排序,在两层外存模型中假设 $N M\ge2B$、只有一个磁盘($P=1$),内部内存容纳 $M$ 个不可拆分的原子记录,一次 I/O 搬运 $B$ 个记录,且内部计算免费。对…”
形式陈述
比较排序规定一种信息访问模型:输入是含
模型允许搬移记录、存储下标和根据已有答案选择下一次比较,但不允许直接读取键的数位、把键值当作桶下标,或利用键的数值编码跳过比较。记录放在数组还是链表中不决定它是否属于比较排序;存储选择会影响比较以外的成本。
对互异键,可以把确定性执行表示为二元决策树:每个内部节点问一次
直觉
比较模型把键视为只能相互比较的对象,算法无法从某个键长得像“17”就直接知道它应该去第几个桶。它必须靠比较答案逐步排除不可能的次序。这种限制使同一个下界能覆盖许多实现,而不依赖某段排序代码。
成本单位也必须明确:一次比较可能被当成一步,但若真实键是很长的字符串,比较本身就可能读取许多字符。比较次数、元素搬移次数和总运行时间可以不同;比较最优不自动意味着缓存或辅助空间也最优。
例子与边界
三个互异元素有
快速排序也是比较排序。互异键的随机枢轴版本通常给期望
输入记录
计数排序用键值定位桶,基数排序读取数位,它们超出了比较接口。对输入已排序、只含少量不同键等受限类别,算法可能少做比较;这不推翻覆盖一般互异输入的最坏下界。
推论与应用
比较排序的下界来自完整次序的输出要求。选择算法只找第
整数排序利用有限键域、位提取或字级运算,改变的是获取键信息的方式。若底层只允许比较,即使键恰好都是整数,比较下界仍然成立。
同一比较算法还可放进不同机器模型。外存排序计量块传输,并行算法模型区分总工作与关键路径;两者都需重新分析数据如何移动或操作如何并发。稳定性、原地性和比较次数也各由不同的算法机制保证。
参考资料
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 4th ed., MIT Press, 2022,§8.1:比较模型与决策树下界。
- Donald E. Knuth, The Art of Computer Programming, Vol. 3: Sorting and Searching, 2nd ed., Addison-Wesley, 1998,Chapter 5。