본문 바로가기
Algorithm

이동평균 구하기

by 이곳느 2020. 3. 20.

이동평균(Moving Average)은 주식의 가격, 연간 국낸 총생산(GDP) 등 시간에 따라 변화하는 값들을 관찰할 때 유용하게 사용할 수 있는 통계적 기준입니다.

시간에 따라 관찰된 숫자들이 주어질때 M - 이동 평균은 마지막 M개의 관찰 값의 평균 으로 정의됩니다. 따라서 새 관찰 값이 나오면 M - 이동평균은 새 관찰 값을 포함하도록 바뀝니다.

#include <vector>
#include <iostream>

using namespace std;

// 이동평균 : N개의 측정치가 주어질 때 
// 매달 M달 간의 이동 평균을 계산하는 프로그램

vector<double> movingAverage1(const vector<double>& A, int M)
{
	vector<double> ret;
	int N = A.size();
	for (int i = M - 1; i < N; ++i) {
		// A[i]까지의 이동 평균 구하기
		double partialSum = 0;
		for (int j = 0; j < M; ++j) {
			partialSum += A[i - j]; 
			ret.push_back(partialSum / M);
		}
	}
	return ret;
}

int main(void)
{
	vector<double> A = {1,2,3,4,5,6,7,8,9,10,11,12};
	vector<double> Result;
	int M = 3;
	Result = movingAverage1(A,3);
	
	for (int i = 0; i < Result.size(); i++) {
		cout << Result[i] << endl;
	}
	return 0;
}

각 위치에서 지난 M개 측정치의 합을 구하고, 이를 M으로 나누면 됩니다.

이 때 코드의 수행시간은 두 개의 for문에 의해 지배 됩니다. j를 사용하는 반복문은 항상 M번 실행되고, i를 사용하는 반복문은 N - M + 1번 실행되닌 전체 반복문은 M + (N - M + 1)번 반복됩니다.

'Algorithm' 카테고리의 다른 글

온도의 최대값 (시간제한 : 1초)  (0) 2020.09.15
이동평균 구하기 - 2  (0) 2020.03.25