Transposing Sparse Matrix
1. 희소행렬(Sparse Matrix)이란?
2. 희소행렬의 대칭이동
3. 대칭이동과 정렬
1. row, col 바꿔주기
2. 적절한 위치에 넣어주기
예를 들어 우리가 A의 열 1이 들어갈 row_start[1]을 구하고 싶다면
row_start[0]에서 A의 열중 0의 갯수를 구하고 더하면 됩니다.
4. 코드
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
#include <stdio.h>
#include <stdlib.h>
#define size 9
#define MAX_COL 6
#define MAX_ROW 6
/*
term: 행렬의 행,열 그리고 해당 값을 저장
*/
typedef struct term {
int row;
int col;
int value;
}term;
term *transposing(term A[]);
int main(void) {
term A[9] = { { 6,6,8 },{ 0,0,15 },{ 0,3,22 },{ 0,5,-15 },{ 1,1,11 },{ 1,2,3 },{ 2,3,-6 },{ 4,0,91 },{ 5,2,28 } };
term *B = transposing(A);
system("pause");
}
term *transposing(term A[]) {
//setting
//처음 부분이니 여러가지를 선언해서 세팅을 해줍시다.
// 위의 col_Count는 여기서 rowTerms로 표현했습니다.
int rowTerms[MAX_COL] = { 0 }, startPoint[MAX_COL] = { 0 };
term B[size];
B[0].col = A[0].row; B[0].row = A[0].col; B[0].value = A[0].value;
//get rowTerm
for (int i = 1; i < size; i++) {
rowTerms[A[i].col]++;
}
//get startpoint
startPoint[0] = 1;
for (int i = 1; i <MAX_COL; i++) {
startPoint[i] = startPoint[i - 1] + rowTerms[i - 1];
}
//transport to B
for (int i = 1; i < size; i++) {
int j = startPoint[A[i].col]++;
B[j].row = A[i].col;
B[j].col = A[i].row;
B[j].value = A[i].value;
}
return B;
}a
| cs |
'Computer Science > Data Structure' 카테고리의 다른 글
Dive Data Structure with Java Collection (1) | 2022.03.10 |
---|---|
2017 카카오페스티벌 예선 문제 1 - 카카오프렌즈 컬러링북 풀이 (0) | 2020.01.18 |
자료구조1 - Selection Sort(선택정렬) & Bineary search(이진탐색) (0) | 2020.01.18 |