Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรมหาค่าเฉลี่ยสัมผัสเบี่ยงเบน (Mean Absolute Deviation) ใน C++

Mean Absolute Deviation (MAD) วัดความกระจายของข้อมูลจากค่าเฉลี่ย โดยใช้ค่าสัมบูรณ์ของความต่าง

สูตร

MAD = (Σ |xᵢ - μ|) / n

โดยที่:

  • μ = Mean (ค่าเฉลี่ย)
  • xᵢ = ข้อมูลแต่ละตัว
  • n = จำนวนข้อมูล

ขั้นตอนการคำนวณ

  1. หาค่าเฉลี่ย (Mean) ของข้อมูล
  2. หาความต่างสัมบูรณ์ของแต่ละข้อมูลจากค่าเฉลี่ย: |xᵢ - μ|
  3. รวมความต่างสัมบูรณ์ทั้งหมด
  4. หารด้วยจำนวนข้อมูล n

ตัวอย่าง

ตัวอย่างที่ 1

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

Mean: (34+21+56+76+45+11)/6 = 243/6 = 40.5

Absolute Deviations:

|34-40.5| = 6.5
|21-40.5| = 19.5
|56-40.5| = 15.5
|76-40.5| = 35.5
|45-40.5| = 4.5
|11-40.5| = 29.5
Sum = 111

MAD: 111/6 = 18.5

ตัวอย่างที่ 2

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

Mean: 96/6 = 16

MAD: (6+1+1+1+2+5)/6 = 16/6 = 2.666...

ตัวอย่างโค้ด

#include <iostream>
#include <vector>
#include <cmath>
#include <iomanip>
using namespace std;

double mean(const vector<double>& arr) {
    double sum = 0;
    for (double x : arr) sum += x;
    return sum / arr.size();
}

double meanAbsoluteDeviation(const vector<double>& arr) {
    double mu = mean(arr);
    double sum = 0;
    for (double x : arr) {
        sum += abs(x - mu);
    }
    return sum / arr.size();
}

int main() {
    vector<double> arr1 = {34, 21, 56, 76, 45, 11};
    cout << fixed << setprecision(2);
    cout << "MAD: " << meanAbsoluteDeviation(arr1) << endl;  // 18.50
    
    vector<double> arr2 = {10, 15, 15, 17, 18, 21};
    cout << "MAD: " << meanAbsoluteDeviation(arr2) << endl;  // 2.67
    
    return 0;
}

เปรียบเทียบ MAD กับ Standard Deviation

ความสัมพันธ์ทางคณิตศาสตร์

สำหรับการแจกแจงปกติ (Normal Distribution):

MAD ≈ 0.7979 × σ  (หรือ σ ≈ 1.2533 × MAD)

ความซับซ้อน

  • เวลา: O(n) – ผ่านอาร์เรย์ 2 รอบ (หา mean, หา MAD)
  • พื้นที่: O(1) – ตัวแปรคงที่

การประยุกต์ใช้

  • วัดความผันผวนของข้อมูลที่มี Outlier
  • Quality Control ในโรงงาน
  • การวิเคราะห์ข้อมูลทางการเงิน (Risk measurement)
  • Machine Learning: Robust loss function
คุณสมบัติMADStandard Deviation (σ)
สูตรΣ|x-μ|/n√(Σ(x-μ)²/n)
หน่วยเหมือนข้อมูลต้นฉบับเหมือนข้อมูลต้นฉบับ
ความไวต่อ Outlierต่ำกว่า (Linear)สูงกว่า (Quadratic)
คณิตศาสตร์ง่าย ไม่มีรากที่สองซับซ้อนกว่า
การใช้งานRobust statisticsParametric statistics