【问题标题】:algorithm to find the median value from an array with an odd number of elements [duplicate]从具有奇数个元素的数组中找到中值的算法[重复]
【发布时间】:2017-01-20 12:13:06
【问题描述】:

我想知道是否存在一种算法来找到奇数长度数组的中位数。显然,可以对数组进行排序并取中间值,但理想情况下,只对中间值感兴趣可以在算法的时间复杂度方面获得收益。

如果不存在这样的算法,任何关于如何开发这样的算法的建议都会很棒。

谢谢

【问题讨论】:

  • 我没有看到任何进行某种排序的方法,这意味着您可能正在查看O(NlgN) 以寻求解决方案。你有什么不想排序的原因吗?
  • 查看 K 选择算法。示例:en.wikipedia.org/wiki/Quickselect

标签: algorithm sorting


【解决方案1】:

是的,存在算法。您正在谈论的问题是找到第 k 个最大元素,其中 k 是数组长度的一半 + 1 的值。这是一个在 O(n) 时间内完成的方法的链接,Median of medians

【讨论】:

    【解决方案2】:

    您可以使用Selection algorithm,它可以找到数组的第k个最小元素,其中k是数组大小的一半。

    对于非结构化数据,它在O(n) 内。

    但请始终牢记,理论上的复杂性并不是一切!

    另请阅读this question

    【讨论】:

      【解决方案3】:

      这由selection algorithm 解决,可以在O(n) 时间内完成。 Quickselect 或其改进的 introselect 是流行的方法。

      快速选择的一个非常简短的总结是运行快速排序,但不是在每一步都对两半进行排序,而是只对包含你要查找的元素的那一半进行排序,这可以通过计算其中有多少元素来确定每个分区。

      例如,C++ 实际上将其作为标准库函数:nth_element

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-04
        • 1970-01-01
        • 1970-01-01
        • 2015-12-04
        • 1970-01-01
        • 2015-08-17
        • 2012-08-16
        相关资源
        最近更新 更多