【发布时间】:2016-06-06 18:35:22
【问题描述】:
假设数组中元素的比较需要 O(n),如果一个元素出现超过 n / 2 次,是否可以在 O(n) 中对数组进行排序?
其实应该是可以的,因为有这个中值算法可以找到数组的中间值,还是我错了?
【问题讨论】:
假设数组中元素的比较需要 O(n),如果一个元素出现超过 n / 2 次,是否可以在 O(n) 中对数组进行排序?
其实应该是可以的,因为有这个中值算法可以找到数组的中间值,还是我错了?
【问题讨论】:
没有。
假设数组中最小的元素出现的次数超过n / 2 次,比如ceil(n / 2) + 1。然后还有n - (ceil(n / 2) + 1) ~ n / 2 = O(n)元素需要排序,仍然需要O(n log n)时间。
【讨论】:
没有。
即使一个元素出现超过n/999 次,复杂度也不是O(n),因为对剩余元素进行排序仍然是O(n log n)。
复杂度并不能告诉您算法需要多长时间才能完成,它表明当您更改 n 时该时间会发生多少变化,即使这种变化的因素很小。
然而,一些分布可以影响复杂性,例如,如果您知道只允许m值(那么O(n)算法包括使用寄存器来计算每个允许值的出现次数)。
【讨论】: