web-dev-qa-db-ja.com

Ruby

Rubyでボックスプロットジェネレーターを作成していますが、いくつか計算する必要があります。

私がこの配列を持っているとしましょう:

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

上記の配列から最小値(1)、最大値(65)、合計(157)、平均(22.43)、中央値(7)を見つけるにはどうすればよいですか?

ありがとう

27
user142019
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
61
sepp2k

最小値、最大値、合計値、平均値の検索は簡単であり、上記のsepp2kの回答に示されているように、線形時間で簡単に実行できます。

medianを見つけるのは簡単ではなく、単純な実装(並べ替えてから中央の要素を取得する)はO(nlogn)時間で実行されます。

ただし、線形時間で中央値を見つけるアルゴリズムがあります(median-of-5アルゴリズムなど)。他のものは、どんな種類の注文統計でも機能します(たとえば、5番目に小さい要素を見つけたいとします)。それらの問題はあなたがそれらを自分で実装しなければならないということです、私はRuby実装がないことを知っています。

O(nlogn)はすでに非常に高速であるため、巨大なデータセットでの作業を計画していない場合(そして、とにかくデータをソートする必要がある場合)は問題ありません。

1
Fryie