Skip to content

模型Model

比较排序

施工中 · 内容逐步修订

Comparison sorting

仅通过元素两两比较确定排列次序的排序模型。

形式陈述 ​

比较排序规定一种信息访问模型:输入是含 n 条记录的有限序列,每条记录带有来自全序键空间的键;算法只通过两个键的比较获得键的次序信息。输出必须包含每条原记录恰好一次,并按键非降排列。不同记录可以有相等键,原有重数必须保留。

模型允许搬移记录、存储下标和根据已有答案选择下一次比较,但不允许直接读取键的数位、把键值当作桶下标,或利用键的数值编码跳过比较。记录放在数组还是链表中不决定它是否属于比较排序;存储选择会影响比较以外的成本。

对互异键,可以把确定性执行表示为二元决策树:每个内部节点问一次 ai<aj,叶节点给出原记录位置的输出排列。正确性要求区分 n! 种相对次序,因而最坏至少需要 ⌈log2⁡(n!)⌉ 次比较。允许相等时,比较器可以返回小于、等于、大于三种结果;讨论具体叶数时必须固定输入类别和分支约定。

直觉

比较模型把键视为只能相互比较的对象,算法无法从某个键长得像“17”就直接知道它应该去第几个桶。它必须靠比较答案逐步排除不可能的次序。这种限制使同一个下界能覆盖许多实现,而不依赖某段排序代码。

成本单位也必须明确:一次比较可能被当成一步,但若真实键是很长的字符串,比较本身就可能读取许多字符。比较次数、元素搬移次数和总运行时间可以不同;比较最优不自动意味着缓存或辅助空间也最优。

比较排序决策树与信息下界
例子与边界

三个互异元素有 3!=6 种相对次序,深度为 2 的二叉树最多有 4 片叶。因此任何正确算法总有输入至少需要三次比较。归并排序与堆排序具有 O(nlog⁡n) 最坏比较数,达到一般比较排序下界的渐近量级。

快速排序也是比较排序。互异键的随机枢轴版本通常给期望 Θ(nlog⁡n),某次运行却可花费二次时间;处理重复键的分区规则又会改变重复输入上的表现。模型成员身份不意味着所有成员具有相同的复杂度保证。

输入记录 [2a,1,2b] 可以排成 [1,2a,2b] 或 [1,2b,2a],两者都满足普通排序规格。若要求稳定,才必须保留 a 在 b 前的原次序。删除其中一个 2 则永远不合法:同一键并不意味着同一条记录。

计数排序用键值定位桶,基数排序读取数位,它们超出了比较接口。对输入已排序、只含少量不同键等受限类别,算法可能少做比较;这不推翻覆盖一般互异输入的最坏下界。

推论与应用

比较排序的下界来自完整次序的输出要求。选择算法只找第 k 小项,不必区分所有排列,因而可以在线性次比较内完成;不能把完整排序的下界套给每一种顺序统计任务。

整数排序利用有限键域、位提取或字级运算,改变的是获取键信息的方式。若底层只允许比较,即使键恰好都是整数,比较下界仍然成立。

同一比较算法还可放进不同机器模型。外存排序计量块传输,并行算法模型区分总工作与关键路径;两者都需重新分析数据如何移动或操作如何并发。稳定性、原地性和比较次数也各由不同的算法机制保证。

参考资料
  • 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。
关系图谱20 个相邻概念 · 4 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系