【问题标题】:Finding a median of a collection of values in c++ [duplicate]在c ++中查找值集合的中位数[重复]
【发布时间】:2011-08-28 21:47:16
【问题描述】:

可能重复:
Compute Median of Values Stored In Vector - C++?

我需要存储一个值的集合,然后有能力计算它的中值。

c++ 中存储这些值的最佳容器是什么?如何找到中位数?

(我可能还希望能够删除特定元素,所以我认为 set 可能不是最佳选择...)

【问题讨论】:

  • 你想要最高效的方法,还是最简单的代码?
  • @Bo 和@Beta:我想我想得到什么...... 1. 是否有一个内置函数可以计算中位数 2. 什么是最好的排序容器(哪些容器自动排序),如果不是,那么最好的排序方式是什么。就速度而言,最有效。我需要做 1000 次这样的计算。
  • @user620189 - 点击链接! :-) 它展示了如何将值放入向量中并对其进行排序。中位数最终会出现在中间。

标签: c++ sorting median


【解决方案1】:

没有任何其他特定要求,您应该默认为std::vector。您提到稍后要删除项目;这意味着您可能需要考虑使用std::list

要找到中位数,您可以使用std::nth_element,要求它以N/2-th(或(N-1)/2-th)元素为轴。这在 O(N) 时间内运行。

【讨论】:

  • 也许你需要补充一点,应该首先对值进行排序(O(nlog(n))
  • @juan:不,因为它们不需要排序。如果它们已经排序,那么就不需要算法来找到中位数了!
  • 我的立场是正确的!所以nth_element 更快,因为 n 两侧的元素实际上不必排序,只需分别小于或大于第 n 个...
  • 您错过了“能够删除特定元素”。使用链表而不是向量不是一个强有力的指示吗?
  • @Nikiton:你说得对,我确实错过了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
  • 2018-01-30
  • 2013-02-16
  • 1970-01-01
  • 2011-09-23
相关资源
最近更新 更多