假设数组中元素的比较采用O(n),如果元素出现的次数超过n / 2次,是否可以在O(n)中对数组进行排序?
实际上它应该是可能的,因为有这个中值算法可以找到数组的中间值,或者我错了吗?
答案 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)
算法包含使用寄存器来计算每个允许值的出现次数。)