ได้รับอาร์เรย์ที่ไม่ได้เรียงลำดับ งานคือคำนวณค่าเฉลี่ย (Mean) และค่ามัธยฐาน (Median)
ค่าเฉลี่ย (Mean)
ผลรวมของทุกค่า หารด้วยจำนวนค่า
Mean = (Σ arr[i]) / n
ค่ามัธยฐาน (Median)
ค่ากึ่งกลางของข้อมูลที่เรียงลำดับแล้ว
- n คี่: ค่าตำแหน่ง
(n-1)/2(0-indexed) หรือn/2(integer division) - n คู่: ค่าเฉลี่ยของตำแหน่ง
n/2 - 1และn/2
ตัวอย่าง
ตัวอย่างที่ 1
Input: arr[] = {3, 5, 2, 1, 7, 8}
Sorted: {1, 2, 3, 5, 7, 8}
Mean: (3+5+2+1+7+8)/6 = 26/6 = 4.33333
Median: (3+5)/2 = 4
ตัวอย่างที่ 2
Input: arr[] = {1, 3, 4, 2, 6, 5, 8, 7}
Sorted: {1, 2, 3, 4, 5, 6, 7, 8}
Mean: 36/8 = 4.5
Median: (4+5)/2 = 4.5
ตัวอย่างโค้ด (Modern C++)
#include <iostream>
#include <vector>
#include <algorithm>
#include <iomanip>
using namespace std;
double mean(const vector<int>& arr) {
long long sum = 0;
for (int x : arr) sum += x;
return static_cast<double>(sum) / arr.size();
}
double median(vector<int> arr) { // pass by value เพื่อ sort ได้
sort(arr.begin(), arr.end());
int n = arr.size();
if (n % 2 == 1) {
return arr[n / 2];
} else {
return (arr[n/2 - 1] + arr[n/2]) / 2.0;
}
}
int main() {
vector<int> arr = {3, 5, 2, 1, 7, 8};
cout << fixed << setprecision(5);
cout << "Mean: " << mean(arr) << endl;
cout << "Median: " << median(arr) << endl;
return 0;
}
ผลลัพธ์
Mean: 4.33333 Median: 4.00000
การจัดการข้อมูลขนาดใหญ่ (Large Data)
หากอาร์เรย์ใหญ่มาก (ไม่พอ RAM) หรือเป็น Stream:
- Mean: คำนวณออนไลน์ได้ (Running average)
- Median: ต้องใช้ Two Heaps (Max-heap + Min-heap) หรือ Order Statistics Tree (Policy-based data structure)
Median แบบ Online (Two Heaps)
class MedianFinder {
priority_queue<int> maxHeap; // ครึ่งล่าง
priority_queue<int, vector<int>, greater<int>> minHeap; // ครึ่งบน
public:
void addNum(int num) {
maxHeap.push(num);
minHeap.push(maxHeap.top()); maxHeap.pop();
if (maxHeap.size() < minHeap.size()) {
maxHeap.push(minHeap.top()); minHeap.pop();
}
}
double findMedian() {
if (maxHeap.size() > minHeap.size()) return maxHeap.top();
return (maxHeap.top() + minHeap.top()) / 2.0;
}
};
สถิติอื่นๆ ที่เกี่ยวข้อง
| สถิติ | สูตร/วิธี |
|---|---|
| Mode | ค่าที่เกิดบ่อยที่สุด (ใช้ Hash Map นับ) |
| Range | Max - Min |
| Variance | Σ(x-μ)²/n |
| Standard Deviation | √Variance |