我正在用 Ruby 创建一个箱线图生成器,我需要计算一些东西。
假设我有这个数组:
arr = [1, 5, 7, 2, 53, 65, 24]
如何从上述数组中找到最小值 (1)、最大值 (65)、总计 (157)、平均值 (22.43) 和中值 (7)?
谢谢
lowest = arr.min
highest = arr.max
total = arr.inject(:+)
len = arr.length
average = total.to_f / len # to_f so we don't get an integer result
sorted = arr.sort
median = len % 2 == 1 ? sorted[len/2] : (sorted[len/2 - 1] + sorted[len/2]).to_f / 2
找到最小值、最大值、总和和平均值很简单,可以在线性时间内轻松完成,如上面 sepp2k 的答案所示。
找到中位数并不那么简单,而且简单的实现(排序,然后取中间元素)在 O(nlogn) 时间内运行。
但是,有一些算法可以在线性时间内找到中位数(例如 5 的中位数算法)。其他人甚至适用于任何类型的订单统计(例如,您想找到第 5 个最小的元素)。这些问题是你必须自己实现它们,我知道没有 Ruby 实现。
O(nlogn) 已经相当快了,所以如果您不打算处理庞大的数据集(并且无论如何您都需要对数据进行排序),那么您就可以了。