【发布时间】: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
给定具有n个元素[1,...,n]的数组的最大元素M,每个基于比较的排序算法的时间复杂度下限Ω(nlogn)如何受到影响?我必须强调给出了数组的最大元素 M。
【问题讨论】:
标签: algorithm sorting comparison binary-tree lower-bound
不受影响。
请注意,有n! 可能的排列,并且每个比较 OP 都有 2 个可能的结果 - “左边更高”或“右边更高”。
对于任何基于比较的算法,每个“决定”都是根据一次比较的结果做出的。
因此,为了成功确定任何排列的正确顺序,您将需要(在最坏的情况下)log2(n!) 个比较。
但是,众所周知,log2(n!) 在 Theta(nlogn) 中 - 无论范围如何,您都会回到 Omega(nlogn) 的下限手。
请注意,存在其他不使用(仅)比较的方法可以更有效地对整数进行排序。
【讨论】:
如果M 确实是数组元素绝对值的界限,并且元素是整数,则可以在O(n + M) 时间内对数组进行排序,方法是将单独的数组int occurrences[2M + 1]; 初始化为@ 987654324@,扫描您的原始数组并计算每个元素的出现次数,并使用occurrences 写入输出数组。
如果元素是浮点数(形式上为实数),则对它们的大小进行限制没有影响。
如果元素是整数并且可以是负数(正式地,任意大的整数),那么对大小设置上限没有影响。
编辑:第一段有O(n),应该是O(n + M)。
【讨论】: