【问题标题】:Lower bound Ω(nlogn) of time complexity of every comparison based sorting algorithm given M maximum给定 M 最大值的每个基于比较的排序算法的时间复杂度下限 Ω(nlogn)
【发布时间】:2025-11-22 11:40:01
【问题描述】:

给定具有n个元素[1,...,n]的数组的最大元素M,每个基于比较的排序算法的时间复杂度下限Ω(nlogn)如何受到影响?我必须强调给出了数组的最大元素 M。

【问题讨论】:

  • O( (n-1)log(n-1) ) = O(nlogn)

标签: algorithm sorting comparison binary-tree lower-bound


【解决方案1】:

不受影响。

请注意,有n! 可能的排列,并且每个比较 OP 都有 2 个可能的结果 - “左边更高”或“右边更高”。
对于任何基于比较的算法,每个“决定”都是根据一次比较的结果做出的。

因此,为了成功确定任何排列的正确顺序,您将需要(在最坏的情况下)log2(n!) 个比较。
但是,众所周知,log2(n!) 在 Theta(nlogn) 中 - 无论范围如何,您都会回到 Omega(nlogn) 的下限手。

请注意,存在其他不使用(仅)比较的方法可以更有效地对整数进行排序。

【讨论】:

  • 值得一提的是,有 n!排列当且仅当所有元素都是不同的。
【解决方案2】:

如果M 确实是数组元素绝对值的界限,并且元素是整数,则可以在O(n + M) 时间内对数组进行排序,方法是将单独的数组int occurrences[2M + 1]; 初始化为@ 987654324@,扫描您的原始数组并计算每个元素的出现次数,并使用occurrences 写入输出数组。

如果元素是浮点数(形式上为实数),则对它们的大小进行限制没有影响。

如果元素是整数并且可以是负数(正式地,任意大的整数),那么对大小设置上限没有影响。

编辑:第一段有O(n),应该是O(n + M)

【讨论】:

  • 它没有回答这个问题。 OP确实询问如何有效地对整数排列进行排序,他询问它是排列这一事实如何影响基于比较的算法的界限
最近更新 更多