当元素出现超过n / 2次时,它是否可以在O(n)中对数组进行排序?

时间:2016-06-06 18:35:23

标签: algorithm runtime

假设数组中元素的比较采用O(n),如果元素出现的次数超过n / 2次,是否可以在O(n)中对数组进行排序?

实际上它应该是可能的,因为有这个中值算法可以找到数组的中间值,或者我错了吗?

2 个答案:

答案 0 :(得分:3)

没有

假设数组中的最小元素出现的时间超过n / 2次,假设为ceil(n / 2) + 1。然后仍有n - (ceil(n / 2) + 1) ~ n / 2 = O(n)个元素需要排序,这仍需要O(n log n)次。

答案 1 :(得分:1)

没有

即使元素出现的次数超过n/999次,复杂性也不是O(n),因为对其余元素进行排序仍为O(n log n)

复杂性并不能告诉您算法需要多长时间才能完成,这表明当您更改n时,此时间会发生多少变化,即使此变化的因素很小。< / p>

但是,某些分发 可以影响复杂性,例如,如果您知道只允许m个值(那么O(n)算法包含使用寄存器来计算每个允许值的出现次数。)