C++でソートされていない配列の平均値と中央値を求めるプログラム
はじめに
ソートされていない配列が与えられたとき、その平均値(平均)と中央値を計算するのが課題です。本記事では、C++を使ってこれらの統計量を求める方法を、計算式・アルゴリズム・実装例とともにわかりやすく解説します。
平均値の計算方法
平均値は、データ全体の平均的な大きさを表す基本的な指標です。次の式で求めることができます。
平均値 = (配列の全要素の合計) ÷ (要素の総数)
中央値の計算方法
配列がすでにソートされている場合、中央値は次のように定義されます。
- 要素数が奇数の場合: 配列の中央に位置する要素がそのまま中央値になります。
- 要素数が偶数の場合: 中央に位置する2つの要素の平均が中央値になります。
配列がソートされていない場合は、まず配列を昇順にソートしてから、上記のロジックを適用する必要があります。
nが奇数の場合の例
1, 2, 3, 4, 5 中央値 = 3
nが偶数の場合の例
1, 2, 4, 5 中央値 = (2 + 4) / 2 = 3
入出力例1
入力
arr[] = {3,5,2,1,7,8}
出力
Mean is : 4.33333 Median is : 4
入出力例2
入力
arr[] = {1, 3, 4, 2, 6, 5, 8, 7}
出力
Mean is: 4.5 Median is: 4.5
アルゴリズム
開始
ステップ1 → 平均値を計算する関数を宣言
double mean(int arr[], int size)
int sum = 0 を宣言
ループ(int i = 0; i < size; i++)
sum += arr[i]
終了
return (double)sum / (double)size
ステップ2 → 中央値を計算する関数を宣言
double median(int arr[], int size)
sort(arr, arr+size) を呼び出して配列をソート
IF (size % 2 != 0)
return (double)arr[size/2]
終了
return (double)(arr[(size-1)/2] + arr[size/2]) / 2.0
ステップ3 → main() 内での処理
int arr[] = {3,5,2,1,7,8} を宣言
int size = sizeof(arr)/sizeof(arr[0]) を宣言
mean(arr, size) を呼び出し
median(arr, size) を呼び出し
終了
C++による実装例
#include <bits/stdc++.h>
using namespace std;
//平均値を計算する関数
double mean(int arr[], int size){
int sum = 0;
for (int i = 0; i < size; i++)
sum += arr[i];
return (double)sum/(double)size;
}
//中央値を計算する関数
double median(int arr[], int size){
sort(arr, arr+size);
if (size % 2 != 0)
return (double)arr[size/2];
return (double)(arr[(size-1)/2] + arr[size/2])/2.0;
}
int main(){
int arr[] = {3,5,2,1,7,8};
int size = sizeof(arr)/sizeof(arr[0]);
cout << "Mean is : " << mean(arr, size)<<endl;
cout << "Median is : " << median(arr, size) << endl;
return 0;
}
実行結果
上記のコードを実行すると、次のような出力が得られます。
Mean is : 4.33333 Median is : 4
ポイントまとめ
- 平均値の計算はO(n)、中央値の計算はソートが必要なためO(n log n)の計算量になります。
- 整数同士の除算で小数部分が切り捨てられるのを防ぐため、
double型へのキャストが重要です。 - 要素数が偶数の場合は、中央の2つの要素の平均を取る点に注意しましょう。
-
C++で平均絶対偏差(MAD)を計算するプログラムの書き方
自然数の配列が与えられ、その平均絶対偏差(Mean Absolute Deviation:MAD)を計算することが課題です。平均絶対偏差とは、各データ点と平均値の差(偏差)の絶対値を取ったものの平均であり、データのばらつき具合を測るための統計量の一つです。これを求めるためには、平均、分散、標準偏差に関する基礎知識が必要となります。 平均絶対偏差を計算するには、以下の手順に従います。 平均を計算する 絶対偏差を計算する 計算したすべての偏差を合計する 公式を適用する 入力例と出力例 入力 arr[] = { 34,21,56,76,45,11} 出力 mean absolute devi
-
配列の全要素を乗算するC++プログラムの解説
整数型の要素を持つ配列が与えられたとき、配列内のすべての要素を掛け合わせ、その積を表示することを考えます。本記事では、この問題をC++(C言語スタイルのコード)で解く方法を、アプローチ、アルゴリズム、サンプルコード、実行結果まで順を追って解説します。 例 入力: arr[]={1,2,3,4,5,6,7} 出力: 1 x 2 x 3 x 4 x 5 x 6 x 7 = 5040 入力: arr[]={3, 4, 6, 2, 7, 8, 4} 出力: 3 x 4 x 6 x 2 x 7 x 8 x 4 = 32256 解き方のアプローチ この問題は、累積用の一時変数を用意し、配列の要素を先頭