C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++で平均絶対偏差(MAD)を計算するプログラムの書き方


自然数の配列が与えられ、その平均絶対偏差(Mean Absolute Deviation:MAD)を計算することが課題です。平均絶対偏差とは、各データ点と平均値の差(偏差)の絶対値を取ったものの平均であり、データのばらつき具合を測るための統計量の一つです。これを求めるためには、平均、分散、標準偏差に関する基礎知識が必要となります。

平均絶対偏差を計算するには、以下の手順に従います。

  • 平均を計算する

  • 絶対偏差を計算する

  • 計算したすべての偏差を合計する

  • 公式を適用する

C++で平均絶対偏差(MAD)を計算するプログラムの書き方

入力例と出力例

入力

arr[] = { 34,21,56,76,45,11}

出力

mean absolute deviation is : 18.5

入力

arr[] = {10, 15, 15, 17, 18, 21}

出力

mean absolute deviation is : 2.66

プログラムの処理手順

  • 配列の要素を入力する

  • 配列の平均を計算する

  • 次の式を使って各要素の偏差を計算する
    Sum = Sum + abs(arr[i] - Mean(arr, n))

  • 偏差の合計を配列の要素数で割り、平均絶対偏差を求める

(abs(arr[0] – mean) + abs(arr[1] – mean) + … + abs(arr[n-1] – mean)) / n

アルゴリズム

開始
ステップ1→ 平均を計算する関数を宣言する
    float mean(float arr[], int size)
      float型の sum = 0 を宣言
      int i = 0、i < size、i++ の条件でループ
          sum = sum + arr[i] を設定
      ループ終了
      sum / size を返す
ステップ2→ 偏差を計算する関数を宣言する
    float deviation(float arr[], int size)
      float型の sum = 0 を宣言
      int i = 0、i < size、i++ の条件でループ
          sum = sum + abs(arr[i] - mean(arr, size)) を設定
      ループ終了
      sum / size を返す
ステップ3→ main() 関数内
      float arr[] = { 34,21,56,76,45,11} を宣言
      int size = sizeof(arr) / sizeof(arr[0]) を宣言
      deviation(arr, size) を呼び出す
終了

コード例

#include <bits/stdc++.h>
using namespace std;
//mean関数を使って平均を計算する
float mean(float arr[], int size){
    float sum = 0;
    for (int i = 0; i < size; i++)
        sum = sum + arr[i];
    return sum / size;
}
//平均絶対偏差を計算する
float deviation(float arr[], int size){
    float sum = 0;
    for (int i = 0; i < size; i++)
        sum = sum + abs(arr[i] - mean(arr, size));
    return sum / size;
}
int main(){
    float arr[] = { 34,21,56,76,45,11};
    int size = sizeof(arr) / sizeof(arr[0]);
    cout<<"mean absolute deviation is : "<<deviation(arr, size);
    return 0;
}

出力

上記のコードを実行すると、次の出力が得られます。

mean absolute deviation is : 18.5

コードの解説

このプログラムでは、まず mean() 関数が配列内の全要素を合計し、要素数で割ることで平均値を求めます。次に deviation() 関数が、各要素と平均値の差の絶対値を順に合計し、その合計を要素数で割ることで平均絶対偏差を計算します。最後に main() 関数で配列とそのサイズを定義し、deviation() 関数を呼び出して結果を標準出力に表示します。計算量は O(n) であり、要素数が増えても効率的に処理できる点が特徴です。

  1. C++で十二面体の表面積を計算するプログラム

    十二面体とは? 「十二面体(dodecahedron)」という言葉は、ギリシャ語に由来しています。「dodeca」は「12」、「hedron」は「面」を意味します。幾何学における十二面体とは、12枚の平面から構成される3次元の正多面体(プラトンの立体)のことです。 他の立体図形と同様に、十二面体にも以下のような特徴的な性質があります。 20個の頂点 30本の辺 12枚の正五角形の面(五角形は5つの辺を持つ多角形) 以下は十二面体の図です。 問題 一辺の長さが与えられたとき、その十二面体の表面積を求めるプログラムを作成します。ここでいう表面積とは、図形のすべての面が占める空間の総面積のこ

  2. C++で学ぶクイックソート(QuickSort)の仕組みと実装方法

    クイックソートとはクイックソート(Quicksort)は、比較に基づいて未ソートのリスト(配列)を並べ替えるソートアルゴリズムの一つです。「パーティション交換ソート(partition exchange sort)」とも呼ばれます。クイックソートは安定ソートではありません。これは、等しい値を持つ要素同士の相対的な順序が保持されないためです。ただし、配列に対してごくわずかな追加メモリだけで動作するため、メモリ効率に優れています。選択ソートと非常に似ていますが、常に最悪のパーティションを選んでしまうわけではない点が異なり、より洗練された形の選択ソートと捉えることもできます。クイックソートは最も効率