Нахождение самого высокого, самого низкого, общего, среднего и среднего значения из массива в Ruby - PullRequest
26 голосов
/ 03 июня 2010

Я создаю генератор boxplot в Ruby, и мне нужно вычислить некоторые вещи.

Допустим, у меня есть этот массив:

arr = [1, 5, 7, 2, 53, 65, 24]

Как найти самое низкое значение (1), наибольшее значение (65), общее (157), среднее (22,43) и медиану (7) из вышеуказанного массива?

Спасибо

Ответы [ 2 ]

61 голосов
/ 03 июня 2010
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
1 голос
/ 26 декабря 2012

Нахождение минимума, максимума, суммы и среднего значения тривиально и может быть легко выполнено за линейное время, как показано в ответе sepp2k выше.

Поиск медианы менее тривиален, и наивная реализация (сортировка, а затем получение среднего элемента) выполняется за время O (nlogn).

Однако существуют алгоритмы, которые находят медиану за линейное время (например, алгоритм медианы-5). Другие работают даже для любого вида статистики заказов (скажем, вы хотите найти 5-й наименьший элемент). Проблема в том, что вам придется реализовывать их самостоятельно, я не знаю никакой реализации Ruby.

O (nlogn) уже достаточно быстр, поэтому, если вы не планируете работать с огромными наборами данных (и если вам все равно придется сортировать данные), с этим все будет в порядке.

...