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

ค่าเฉลี่ยของสตรีมตัวเลขใน C++

ปัญหา

ให้สตรีมตัวเลข ต้องการแสดงค่าเฉลี่ยสะสมหลังจากเพิ่มตัวเลขแต่ละตัว

ตัวอย่าง: 24, 76, 29, 63, 88

  • หลัง 1 ตัว: 24
  • หลัง 2 ตัว: (24+76)/2 = 50
  • หลัง 3 ตัว: (24+76+29)/3 = 43
  • หลัง 4 ตัว: (24+76+29+63)/4 = 48
  • หลัง 5 ตัว: (24+76+29+63+88)/5 = 56

อัลกอริทึม

ใช้สูตรอัปเดตแบบทบต้น (Incremental Average):

average_new = (average_old * i + new_value) / (i + 1)

โดย i = จำนวนตัวที่ผ่านมา (เริ่มจาก 0)

วิธีนี้ไม่ต้องเก็บผลรวมทั้งหมด ลดปัญหา Overflow และคำนวณได้เร็ว

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

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

int main() {
    int arr[] = {24, 76, 29, 63, 88};
    int n = sizeof(arr) / sizeof(arr[0]);
    double average = 0;
    
    cout << fixed << setprecision(2);
    for (int i = 0; i < n; i++) {
        average = (average * i + arr[i]) / (i + 1);
        cout << "Average of " << (i+1) << " numbers: " << average << endl;
    }
    return 0;
}

ผลลัพธ์

Average of 1 numbers: 24.00
Average of 2 numbers: 50.00
Average of 3 numbers: 43.00
Average of 4 numbers: 48.00
Average of 5 numbers: 56.00

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

  • เหมาะสำหรับสตรีมข้อมูลขนาดใหญ่หรือไม่รู้ขนาดล่วงหน้า
  • ใช้ได้กับทุกชนิดข้อมูลตัวเลข (int, float, double)
  • ประยุกต์ได้กับ Moving Average, Exponential Moving Average