일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- truth table
- 써킷
- 항진명제
- full adder
- Binary notation
- GPT-1
- relationaldatabaseschema
- ermodel
- Tautology
- 모두의네트워크
- 명제
- Decimal notation
- Digital Logic Circuits
- Logical statement
- Gate
- 모순명제
- statement equivalence
- Sentiment Analysis
- Contradiction
- dnf
- 명제 동치
- 십진법
- 모두의네트워크정리
- 진리표
- Circuit
- 모두의네트워크요약
- cnn
- 이진법 십진법 변환
- CNF
- half adder
- Today
- Total
NLP Learner in Switzerland
[C] Matrix Multiplication ::: 행렬의 곱 본문
까다로운 부분 알아가기
[1] matrix의 size는 3 x 3이다.
▶ size = 3을 const qualifier를 사용해서 제한시켜준다.
▶ 이렇게 하면 function parameter에 넣어줄 수 있다. (int A[][]는 에러난다)
[2] 2차원 matrix의 구성은? row(행) x column(열)
▶ matrix 는 multidimensional array로 표현한다. 2차원인 경우에는 A[size][size], 3차원인 경우에는 A[size][size][size]의 형태로 초기화 한다. size를 선언하지 않고도 할 수 있는 다른 방법이 있겠지만 아직 초심자이므로 모르기로 하자.
[3] 행렬곱 AB의 각 원소에 넣어줄 변수가 필요하다.
▶ 이 변수를 sum으로 선언했고, 최초에 0으로 초기화 해주어야 함에 주의. 변수 선언만 하면 이상한 숫자가 출력될 수 있다.
▶ 루프를 돌면서 sum값(AB의 원소값)이 정해지면 다시 0으로 초기화해주어야 한다. 그렇지 않으면 sum값이 누적되버린다.
[4] matrix 곱을 표현하려면 조건을 어떻게 주어야 할까?
▶ A행렬의 원소가 {a11,a12,a13},{a21,a22,a23},{a31,a32,a33}
B행렬의 원소가 {b11,b12,b13},{b21,b22,b23},{b31,b32,b33} 라고 두면
A와 B행렬의 곱 AB의 원소는 {a11*b11+a12*b21+a13*b31, a11*b21+a12*b22+a13*b23, ...}이므로
각 원소 인덱스의 변화를 따라가면서 loop를 어떻게 만들지 생각한다.
[5] 행렬을 row by row로 출력해야 한다.
▶ row 1줄을 출력하고 나면 "\n"를 출력해주어 줄바꿈을 해준다.
#include <stdio.h>
const int n=3; --------------------------- [1]
int matrixMultiplication(int A[n][n], int B[n][n]){
int i,j,k,sum = 0; ------------------- [3]
int AB[n][n]; ------------------------ [2]
for(i=0;i<n;i++){ -------------------- [4]
for(j=0;j<n;j++){
for(k=0;k<n;k++){
sum = sum + A[i][k]*B[k][j];
AB[i][j] = sum; ---------- [3]
}
sum = 0; --------------------- [3]
}
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%d ", AB[i][j]);
}
printf("\n"); -------------------- [5]
}
}
int main(){
int A[3][3] = {1,2,3,4,5,6,7,8,9}; --- [2]
int B[3][3] = {9,8,7,6,5,4,3,2,1}; --- [2]
matrixMultiplication(A,B);
return 0;
}
출력결과
'Algorithm in C > Exercise' 카테고리의 다른 글
[C] Multiple Recursion ::: 재귀호출이 2번 이상 일어나는 경우 (0) | 2021.04.01 |
---|---|
[C] Basic Recursion ::: 재귀함수로 거듭제곱 나타내기 (0) | 2021.03.31 |
[C] Selection Sort in Ascending & Descending Order ::: 선택정렬 (0) | 2021.03.30 |
[C] Perfect Square Number ::: 제곱수 판별하기 (0) | 2021.03.29 |
[C] Reverse String ::: 문자열을 입력받아 거꾸로 출력하기 (0) | 2021.03.29 |