2021.03.16 - [전체글] - 자료구조 공부#6 (배열, 구조체)
이전내용에 이어지는 내용이다
희소 행렬(Sparse Matrix)
- 배열을 이용하여 행렬을 표현하는 2가지 방법
- 2차원 배열을 이용하여 전체 요소를 저장하는 방법
- 0이 아닌 요소들만 저장하는 방법(위치, 요소)
- 희소행렬 : 대부분의 항들이 0인 배열
2차원 배열에 전체 요소를 저장 하는 경우
장점 : 연산 구현이 간단함
단점 : 대부분의 항이 0인 희소 행렬의 경우에는 메모리 공간낭비가 있음
0이 아닌 요소들만 저장하는 경우
장점 : 희소 행렬에 경우에는 메모리 공간 절약이 된다.
단점 : 각종 행렬 연산들의 구현이 복잡해진다
#include <stdio.h>
#define MAX_TERMS 101
typedef struct {
int row;
int col;
int value;
} element;
typedef struct SparseMatrix {
element data[MAX_TERMS];
int rows; // 행의 개수
int cols; // 열의 개수
int terms; // 항의 개수
} SparseMatrix;
SparseMatrix matrix_transpose2(SparseMatrix a) {
SparseMatrix b;
int bindex; // 행렬 b에서 현재 저장 위치
b.rows = a.rows;
b.cols = a.cols;
b.terms = a.terms;
if (a.terms > 0) {
bindex = 0;
for (int c = 0; c < a.cols; c++) {
for (int i = 0; i < a.terms; i++) {
if (a.data[i].col == c) {
b.data[bindex].row = a.data[i].col;
b.data[bindex].col = a.data[i].row;
b.data[bindex].value = a.data[i].value;
bindex++;
}
}
}
}
return b;
}
void matrix_print(SparseMatrix a) {
printf("====================\n");
for (int i = 0; i<a.terms; i++) {
printf("(%d, %d, %d) \n", a.data[i].row, a.data[i].col, a.data[i].value);
}
printf("====================\n");
}
int main(void) {
SparseMatrix m = {
{{0,3,7},{1,0,9},{1,5,8},{3,0,6},{3,1,5},{4,5,1},{5,2,2}},
6,
6,
7
};
SparseMatrix result;
result = matrix_transpose2(m);
matrix_print(result);
return 0;
}
행렬 전치
행을 열로 열을 행으로 바꾸어놓는 것
#include <stdio.h>
#define ROWS 3
#define COLS 3
void matrix_transp(int A[ROWS][COLS], intB[ROWS][COLS]){
for (int r= 0; r<ROWS; r++){
for (int c=0; c<COLS; c++){
B[c][r] = A[r][c];
}
}
}
void matrix_print(int A[ROWS][COLS]){
printf("===================\n");
for (int r=0;r<ROWS;r++){
for (int c=0;c<COLS;c++){
printf("%d", A[r][c]);
}
printf("\n");
}
printf("===================\n");
}
int main(void){
int array1[ROWS][COLS] = {{2,3,0}, {8,9,1}, {7,0,5}};
int array2[ROWS][COLS];
matrix_transp(array1,array2);
matrix_print(array1);
matrix_print(array2);
return 0;
}
느낀점 : 메모리 낭비를 절약하는 방식과 연산을 편하게 하는 방식 두가지를 나누어서 교수님이 설명해주셨는데 그것에 장단점과 도대체 어떤식으로 구현이 되는지 예를 들어진 코드들을 잘 참고하자
'이론공부 > 자료구조' 카테고리의 다른 글
자료구조 공부#9 (스택) (0) | 2021.03.27 |
---|---|
자료구조 공부#8 (포인터) (0) | 2021.03.26 |
자료구조 공부#6 (배열, 구조체) (0) | 2021.03.16 |
자료구조 공부#5 (순환, 반복#2) (0) | 2021.03.16 |
자료구조 공부#3 (알고리즘의 성능 분석) (0) | 2021.03.09 |