【问题标题】:Will it work to sort an array in O(n) when an element occurs more than n / 2 times?当一个元素出现超过 n / 2 次时,它会在 O(n) 中对数组进行排序吗?
【发布时间】:2016-06-06 18:35:22
【问题描述】:

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

其实应该是可以的,因为有这个中值算法可以找到数组的中间值,还是我错了?

【问题讨论】:

    标签: algorithm runtime


    【解决方案1】:

    没有。

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

    【讨论】:

      【解决方案2】:

      没有。

      即使一个元素出现超过n/999 次,复杂度也不是O(n),因为对剩余元素进行排序仍然是O(n log n)

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-10
        • 2014-03-24
        • 1970-01-01
        • 1970-01-01
        • 2018-01-18
        • 1970-01-01
        相关资源
        最近更新 更多