Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 행렬의 평균 벡터(Mean Vector) 구하는 방법

M × N 크기의 행렬이 주어졌을 때, 이 행렬의 평균 벡터(mean vector)를 구하는 문제를 살펴보겠습니다. 평균 벡터란 각 열(column)별 평균값을 순서대로 나열한 벡터를 의미합니다.

문제 이해하기

예를 들어 다음과 같은 3×3 행렬이 있다고 가정해 보겠습니다.

123
456
789

이 행렬의 평균 벡터는 [4, 5, 6]입니다. 각 열의 평균을 계산하면 다음과 같습니다.

  • 첫 번째 열: (1 + 4 + 7) / 3 = 4
  • 두 번째 열: (2 + 5 + 8) / 3 = 5
  • 세 번째 열: (3 + 6 + 9) / 3 = 6

예시에서 알 수 있듯이, 각 열의 평균값을 차례대로 모으면 곧 행렬의 평균 벡터가 됩니다.

C++ 구현 예제

아래 코드는 2차원 배열로 표현된 행렬을 입력받아, 각 열의 합계를 구한 뒤 행의 개수로 나누어 평균 벡터를 출력합니다.

#include<iostream>
#define M 3
#define N 3
using namespace std;

void calculateMeanVector(int mat[M][N]) {
    cout << "[ ";
    for (int i = 0; i < N; i++) {
        double average = 0.00;
        int sum = 0;
        // i번째 열의 모든 요소를 합산
        for (int j = 0; j < M; j++)
            sum += mat[j][i];
        average = (double)sum / M;
        cout << average << " ";
    }
    cout << "]";
}

int main() {
    int mat[M][N] = {{ 1, 2, 3 },
                     { 4, 5, 6 },
                     { 7, 8, 9 }
                    };
    cout << "Mean vector is: ";
    calculateMeanVector(mat);
    return 0;
}

실행 결과

Mean vector is: [ 4 5 6 ]

코드 설명

  • 외부 반복문(i)은 열(column)을 순회하고, 내부 반복문(j)은 해당 열의 각 행(row) 요소를 방문합니다.
  • 내부 반복문에서 mat[j][i]로 접근하여 i번째 열의 모든 값을 sum에 누적합니다.
  • 누적된 합계를 행의 개수 M으로 나누면 해당 열의 평균이 됩니다. 정수 나눗셈 오류를 방지하기 위해 (double) 형 변환을 사용하는 것이 좋습니다.

시간 복잡도

행렬의 모든 요소를 한 번씩 방문하므로 시간 복잡도는 O(M × N)이며, 추가 공간은 결과 벡터 저장에 O(N)만큼 필요합니다.