Подтвердить что ты не робот

Поиск наивысшего, самого низкого, общего, среднего и медианного из массива в Ruby

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

Скажем, у меня есть этот массив:

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

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

Спасибо

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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